De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Usando cores e formatação em shell scripts

Colaboração: Angelo Roberto Bonfieti Junior

Data de Publicação: 27 de Abril de 2024

Já se deparou com a necessidade (ou vontade) de destacar texto ou simplesmente fazer o output do seu script tornar-se visualmente chamativo ?

Normalmente programadores (especialmente em shell script) não adotam isso por gostarem do texto puro, da linha de comando. Telinha preta 🖥

Todavia, se você é daqueles que acredita que seus scripts podem ficar melhores com alguma "cosmética", acredite, eles ficam mesmo. Pelo menos visualmente.

Inserir cores e diferenciar texto pode ser interessante quando você quiser destacar um erro, evidenciar diferenças ou, simplesmente, chamar a atenção para algo importante.

Sendo assim, aqui vai uma dica para inserir cores em um script (ou texto):

Essa dica foi testada no editor vi e funciona legal em terminais que suportam o formato ANSI. Basta que você adicione uma certa sequência ao comando echo para alcançar seu objetivo.

A sintaxe genérica é:

 echo "^[[#m"

Onde:

^[ é um caracter especial produzido pressionando Crtl-v e, em seguida, Esc;

O hash (#) é substituído por um número, dependendo do tipo de efeito que voce pretende adicionar ao seu texto;

O segundo [ e a letra m são caracteres normais;

Sendo assim, a sequência

 echo "^[[33mTestando apenas^[[0m"

exibirá o texto Testando apenas em amarelo

Enquanto a sequência:

 echo "^[[31m^[[1mTestando apenas^[[0m"

mostrará o texto Testando apenas em vermelho e negrito (um vermelho um pouco mais forte)

Para imprimir o resultado de uma variável, basta definí-la corretamente e não permitir que o comando echo a interprete. Assim, segue um exemplo de como imprimir a variável TESTE com fundo azul, texto vermelho, negrito e sublinhado:

TESTE="Testing Only"
echo "^[[4m^[[1m^[[44m^[[31m${TESTE}^[[0m"

Neste exemplo, além de formatar o texto, também delimitei o início e fim do nome da variável com {} - isso para evitar qualquer erro de interpretação pelo echo e pelos caracteres especiais.

Note que eu sempre termino com a sequencia ^[[0m. Esse é o código passado ao echo que irá retornar seu cursor ao estado "normal", ou seja, como estava previamente (sem cores).

Abaixo anexo uma pequena tabela C de várias cores e formatos. Existem mais códigos, mas esse são os que eu mais utilizo. Sugiro que, se houver tempo e disposição, você descubra as outras combinações e possibilidades... ;)

Tabela de códigos:

CORES DE TEXTO

PRETO 30
VERMELHO 31
VERDE 32
AMARELO 33
AZUL 34
MAGENTA 35
CIANO 36
BRANCO 37

CORES DE FUNDO

PRETO 40
VERMELHO 41
VERDE 42
AMARELO 43
AZUL 44
MAGENTA 45
CIANO 46
BRANCO 47

MODOS ANSI

NORMAL 0
NEGRITO 1
BAIXA INTENSID 2
ITALICO 3
SUBLINHADO 4
PISCANDO 5
PISCA RAPIDO 6
INVERSO 7
INVISIVEL 8

Note que alguns comandos nativos do Unix, como cat e pg, por exemplo, já mostram o resultado formatado, ou seja, colorido. Outros comandos, como more irão mostrar o código completo. O interessante, aqui, é notar que no último exemplo (com variável), o cat naquele script exibirá:

TESTE="Testing Only"
echo "${TESTE}"

Onde o texto ${TESTE} já será mostrado colorido.

Mas note também que um simples (e famoso) Crtl-c dessa sequência, seguido de Ctrl-v no vi não irá funcionar. Isso porque os caracteres ^[ são especiais e não um texto puro. Assim, é necessário que eles sejam "passados" para o vi como tal... copiar o arquivo, ou fazer um cat direcionando a saida para outro arquivo, no entanto, funcionam perfeitamente.

Boa programação e boa diversão :)

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Angelo Roberto Bonfieti Junior