Existe alguma página de manual para saída colorida do shell?

23

Você sabe, essa saída colorida produzida por seqüências especiais de caracteres, por exemplo:

echo -e "\e[34m Hello\n \e[0m"

Isso produzirá a palavra "Olá" colorida em azul. Para fazer isso, tive que pesquisar na web, e é difícil, porque fontes diferentes podem dizer algo diferente. Eu pensei que deveria haver alguns manuais, mas não consegui encontrá-los. Mesmo com apropos colorou algo semelhante. Então, a questão é - onde posso encontrar manuais confiáveis?

Sergius
fonte
2
Você está procurando documentação sobre códigos de escape ANSI. (I tendem a usar a página da Wikipedia, quando eu preciso olhar um para cima.)
chepner
Observe que você não precisa necessariamente conhecer essas seqüências de escape. Várias conchas (tcsh, zsh, peixe pelo menos) têm suporte embutido para saída em cores sem ter que escrever explicitamente essas seqüências.
Stéphane Chazelas

Respostas:

27

Existem muitas fontes de informação para listar nesta página:

  • O comando echo -eusa uma extensão para renderizar \ecomo ASCII 27 (octal 33 ou "\ 033"). A maneira portátil de imprimir esses usos printf(POSIX). Compare com o padrão echo(POSIX).
  • Seu exemplo pode ser reescrito como

    printf "\033[34m Hello\n \033[0m"

  • o padrão para as fugas de cores é o ECMA-48 (funções de controle para conjuntos de caracteres codificados).
  • No ECMA-48, 8.3.117 SGR - SELECT GRAPHIC RENDITION lista seqüências de controle para definir 8 cores de primeiro plano e 8 de fundo.
  • Ele também lista os códigos 39/49 "cor de exibição padrão (definida pela implementação)" e 38/48 "reservados para futura padronização; destinados à definição da cor de primeiro plano de caracteres, conforme especificado na ISO 8613-6 [Recomendação CCITT T.416]". Ou seja, existe uma recomendação de outra organização, mas ela não foi (até agora, depois de 24 anos) incluída no padrão.
  • Ao ler atentamente, você pode perceber que o padrão é vago em muitos lugares, permitindo interpretações diferentes. Ele descreve a sintaxe dessas seqüências de controle, mas não descreve seu comportamento . Para isso, você deve acessar a documentação dos respectivos terminais.
  • A documentação para o xterm é encontrada em XTerm Control Sequences , que pressupõe familiaridade com a documentação DEC encontrada em http://vt100.net
  • para outros terminais, suas páginas de manual podem enumerar os controles (como feito para o console Linux em console_codes ).
  • outros terminais se documentam como "xterm"; para discussão, consulte as Perguntas frequentes do xterm Comparando versões, contando os controles . Felizmente, os controles de cores são principalmente compatíveis (mas consulte as Perguntas frequentes das ncurses. Meu terminal mostra alguns espaços não coloridos ).
  • você também pode ler as páginas de manual tput, o que permite usar terminforecursos em um script de shell. Seu exemplo pode ser reescrito como

    printf '%s\n' "$(tput setaf 4)Hello$(tput setaf 0)"
    
  • algumas fontes, como o Bash Prompt HOWTO e o Advanced Bash-Scripting Guide, mencionam cores, mas (mesmo essas) geralmente têm lacunas e omissões e não são úteis em relação ao ECMA-48.

  • a maioria das outras fontes que você encontrará com uma cópia de pesquisa na web de outras fontes (como as citadas) etc., e, em regra, presta pouca atenção ao padrão atual.
Thomas Dickey
fonte
A seção relevante no ECMA-48 parece ser 8.3.117 - "SGR - SELECIONAR A RENDIÇÃO GRÁFICA". Ele tem as únicas menções à palavra "azul", e os códigos encontrados lá funcionam pelo menos no meu XTerm.
L0b0 07/11/2015
sim - vou adicionar um esclarecimento.
Thomas Dickey
2
É realmente grande resposta - desejo todas as respostas ser como a sua
Sergius
1
O xterm também suporta o modo de 256 cores, presumivelmente isso está documentado em um dos manuais acima.
sendmoreinfo
Veja wynnnetherland.com/journal/… para um monte de informações úteis, incluindo o pacote grc, que pode fazer todo tipo de coisa de colorir com saída de comando.
Joe