Eu me deparei com sequências do bash como \033[999D
e \033[2K\r
que são usadas para fazer alguma manipulação em uma impressão em um terminal. Mas o que essas seqüências significam? Onde posso encontrar uma lista / resumo na Web para me ajudar a descobrir o significado dessas seqüências?
19
Respostas:
Consulte este link http://www.termsys.demon.co.uk/vtansi.htm . Como diz Anthon,
\033
é o código octal no estilo C para um caractere de escape. Ele[999D
move o cursor para trás 999 colunas, presumivelmente uma maneira de força bruta de chegar ao início da linha.[2K
apaga a linha atual.\r
é um retorno de carro que moverá o cursor de volta ao início da linha atual e é uma sequência de escape no estilo C em vez de uma sequência de controle terminal.Atualizar
Como outras pessoas apontaram, essas seqüências de controle não têm nada a ver com elas mesmas,
bash
mas sim o dispositivo / emulador terminal no qual o texto aparece. Era uma vez comum que essas seqüências fossem interpretadas por uma peça de hardware completamente diferente. Originalmente, cada um responderia a conjuntos de códigos completamente diferentes. Para lidar com isso, as bibliotecastermcap
eterminfo
foram usadas para escrever código compatível com vários terminais. Otput
comando é uma interface para aterminfo
biblioteca (otermcap
suporte também pode ser compilado) e é uma maneira mais robusta de criar sequências compatíveis.Dito isto, também há o padrão ANSI X3.64 ou ECMA-48 . Qualquer implementação moderna de terminal usará isso.
terminfo
etermcap
ainda são relevantes, pois a implementação pode estar incompleta ou incluir extensões fora do padrão; no entanto, para a maioria dos propósitos, é seguro supor que sequências ANSI comuns funcionem.O
xterm
FAQ fornece algumas informações interessantes sobre as diferenças entre os modernos emuladores de terminal (muitos tentam emular-xterm
se) e como asxterm
seqüências se relacionam com os terminais VT100 mencionados no link acima. Ele também fornece uma lista definitiva dexterm
seqüências de controle .Também é comum usar o console do Linux, é claro, uma lista definitiva de seqüências de controle para ele
man console_codes
, além de uma comparação comxterm
.fonte
tput
comandos para ter mais portabilidade, iirc (mas às custas de menos cobertura das especificidades do seu terminal). VT100 (aquele sobre o qual a página fala) é suportado por muitos (mas nem tudo é suportado, acredito ...). Mas sua variável TERM pode estar configurada para outro terminal, e isso pode afetar os efeitos de alguns dos comandostput
é uma maneira mais robusta. Mas é a compatibilidade com ANSI e não o terminal VT100 específico que agora é bastante onipresente, embora eu imagine que seja possível definirxterm
um modo que não os aceite. Vou atualizar com mais algumas informações sobre isso, eu acho.TERM=xterm
mas não implementam, tudo o quexterm
faz.O
\033
é o caractere de escape e essas seqüências não são específicas do bash, mas são interpretadas pelo terminal (software ou hardware (via rede ou linha serial)) no qual o programa (bash) é executado. Existem muitas dessas seqüências .O que cada um faz depende do terminal do qual é dependente e também pode depender de qualquer sequência anterior que altere o estado do terminal.
Geralmente são usados para definir cores no prompt do bash , mas não encontrei seus exemplos específicos nessa página.
fonte
'\ 033 [999D' é engraçado. Alguns terminais implementam menos seqüências de escape, portanto, isso pode ser necessário se nenhum dos '\ 033 [1G', '\ 033 [1; 1H', '\ 033 [1; 1f' ou '\ r' se comportar como eles deveria, mas quem usa uma exibição de texto de mil colunas? Essas sequências têm uma página de manual no Linux: console_codes (4) . bjh21 tem uma lista detalhada de todos os códigos . Dependendo de qual programa analisa '\ 033', a substituição mais clara '\ e' pode estar disponível.
Na verdade, não se pretende que eles sejam usados diretamente - a maneira correta de emitir comandos de controle de terminal é com uma camada de abstração como ncurses - mas eles funcionam igualmente a partir de literais de strings.
fonte
\033[999D
o backup seria feito nas linhas anteriores. Porém, pode ser apenas o resultado da codificação desonesta;) Você também podebash
interpretar códigos de escape diretamente, por exemplo:$'\033[999D'
você pode procurar por "lista de escape do termo 033" ou " 033 tput " e consulte http://wiki.bash-hackers.org/scripting/terminalcodes para obter mais informações antes de alguém responder;]
fonte