Eu encontrei muitas seqüências de escape no Bash começando com \033]
, mas quais são essas sequências e por que elas estão começando \033]
?
A string é realmente \033[
e isso não é tudo.
Depois desse colchete de abertura, vem uma série de números e símbolos. Essa sequência é conhecida como uma sequência de escape e é usada para controlar o cursor e a cor do texto do console, entre outras coisas.
seqüências de escape não imprimíveis devem ser incluídas
\[\033[ and \]
Se a sequência de escape estiver controlando a cor do texto, será seguida por um m
.
Aqui está uma tabela para as seqüências de cores:
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
Portanto, se você deseja que o prompt do console seja azul, use a seguinte sequência de escape (no nome do arquivo que estou esquecendo):
\[\033[34m\]
(Observe o m
)
Essa sequência de escape não controla apenas a cor, no entanto. Também pode controlar o movimento do cursor. Aqui está uma tabela / lista com os códigos de movimento e como eles funcionam:
Posicione o Cursor:
\033[<L>;<C>H
Ou
\033[<L>;<C>f
coloca o cursor na linha L e na coluna C.
Mova o cursor para cima N linhas:
\033[<N>A
Mova o cursor para baixo N linhas:
\033[<N>B
Mova o cursor para frente N colunas:
\033[<N>C
Mova o cursor para trás N colunas:
\033[<N>D
Limpe a tela, vá para (0,0):
\033[2J
Apague para o final da linha:
\033[K
Salve a posição do cursor:
\033[s
Restaurar a posição do cursor:
\033[u
Lembre-se de que os dois últimos podem não funcionar no emulador de terminal usado. Aparentemente, apenas xterm
e nxterm
use essas duas sequências.
E exemplo, usando uma dessas seqüências de escape: digamos que quero posicionar meu cursor na linha 3, coluna (caractere) 9. Para isso, eu usaria
\[033\[3;9H]
(Estou assumindo que a coluna 0 é a primeira posição, portanto seria o 8º caractere).
Fonte: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html (leia também 6.2)
Leitura mais geral: http://ascii-table.com/ansi-escape-sequences.php
[2K
apaga a linha inteira antes e depois do cursor. Uma fonte muito melhor seria o artigo da Wikipedia, ou você pode ir diretamente para ECMA-48 , seção 8.3.117 SGR - Selecionar renderização gráfica .0;
nas seqüências de cores é desnecessária. Isso apenas torna a cor do plano de fundo o padrão antes de definir o primeiro plano. Você também pode definir o plano de fundo com4x
.Eles são comandos de controle para o terminal.
Os terminais eram originalmente dispositivos bastante burros, conectados a uma porta serial, e não aqueles sofisticados softwares da GUI com várias guias com menus que agora temos. Como eles receberam apenas um fluxo de caracteres (bytes), não houve uma separação clara entre dados (o que imprimir na tela) e comandos (como imprimi-los). Em vez disso, os comandos são representados com caracteres de controle especiais.
Os caracteres de controle óbvios são coisas como avanço de linha (nova linha), backspace e bipe de sino, mas comandos mais específicos são dados como sequências de caracteres, começando com o
ESC
caractere (código 27 em decimal, 0x1b em hexadecimal ou 033 octal). É frequentemente representado como^[
, ou\033
como no seu exemplo.A sequência
ESC [
é chamada de CSI, ou introdutor da sequência de controle, e inicia um comando com parâmetros numéricos opcionais, terminando geralmente em uma letra que define o comando principal. A maioria das seqüências de escape comuns se enquadra nessa classe.As listas dos códigos de escape podem ser encontradas, por exemplo, na
console_codes(4)
página de manual e na página da Wikipedia para códigos de escape ANSI .Alguns exemplos:
Você pode testar os comandos com, por exemplo, o Bash. Usando a
-e
bandeira, oecho
comando interno aceita\033
como uma representação doESC
caractere.Por exemplo, isso imprimirá uma saudação colorida no meio da tela e outra normalmente na posição original do cursor:
A sequência
ESC ]
que você mencionou é o OSC ou o Comando do sistema operacional, que é usado principalmente no comando para definir o título da janelaxterm
e outros, por exemplo:Depois, há também
ESC ( A
(e outras letras) que definem conjuntos de caracteres nacionais em alguns terminais, para um efeito potencialmente hilário .fonte
O escape seguido por um colchete direito escape
]
é usado para introduzir um comando do sistema operacional (OSC
).Está no ECMA-48 e você pode ler um resumo das seqüências de controle usadas pelo xterm nas XTerm Control Sequences , por exemplo, para alterar o título da janela do terminal.
As seqüências de escape podem começar com caracteres diferentes. O C1 (8 bits) caracteres de controlo secção em XTerm sequências de controlo menciona alguns deles:
CSI
(onde ver como escape[
,APC
,DCS
,PM
. A razão para o carácter diferente (segunda) é porque o par (escapar e]
) está associada com um caractere de controle de byte único usado para diferentes tipos de sequência de escape.Se você ler a especificação, notará que
CSI
é usado para controles com parâmetros numéricos, enquantoOSC
permite seqüências de caracteres. Além da sintaxe, o comitê que criou esse padrão tinha em mente os usosAPC
e osPM
quais diferiam deDCS
eOSC
.fonte
Eles são chamados de códigos de escape ANSI e estão listados na página de manual do console_codes . Eles não são específicos do Bash, mas funcionam em qualquer aplicativo de console, desde que o terminal os suporte (a maioria dos emuladores de terminal).
fonte
As "seqüências de escape" descritas nas outras respostas dependem de qual TIPO terminal você possui (na maioria das vezes "ANSI" ou derivados / similares).
Se você deseja escrever scripts que são (um pouco) INDEPENDENTES do termo final, mas ainda usam, por exemplo, cores e outros recursos especiais, dê uma olhada no conteúdo de
man terminfo
.por exemplo
será impresso
.test.
comtest
fundo amarelado e cor vermelha em primeiro plano, e isso funcionará para QUALQUER terminal que seja capaz de usar cores da mesma maneira.Para ver o que é realmente impresso, insira-o
od -t x1z
como em... onde os valores são mostrados em hexadecimal (devido a "x").
fonte