Cores Em Shell Scripts Sem Caracteres Escapes (com tput)

Introdução

Você já deve ter usado aquelas sequências de escapes para se colorir caracteres em shell scripts:

$ echo -e "\e[31m ESCRITA VERMELHA \e[m"

Pior ainda é se você alguma vez já optou pelos caracteres de controle (ou de escapes):

$ echo "^[[31m ESCRITA VERMELHA ^[[m"

onde tem ^[ pressione ctrl+v+ESC.

Bem, o problema desses caracteres é que eles deixam o código não muito elegante e também podem não funcionar em alguns outros tipos de terminais.

Uma outra solução: tput

tput é um comando com várias características para se manipular um terminal. Ele consegue mover o cursor em linhas, colunas, limpar a tela, e também, colorir caracteres. O tput obtém as informações do terminal associado, desse modo garantindo uma portabilidade maior que os caracteres de escape.

Exemplos

Cor da letra vermelha

$ tput setaf 1; echo COR VERMELHA; tput sgr0

Bem mais limpo, hein? Observe que 1 é o código da cor vemelha e que setaf é a opção para se setar a cor da letra (foreground). tput sgr0 desliga os atributos e volta com o terminal do jeito que estava antes.

Cor da letra azul com fundo branco

$ tput setaf 4; tput setab 7 ; echo COR AZUL; tput sgr0

Aqui, setab seta a cor de fundo (background). O código 7 representa a cor branca.

Negrito

$ tput setaf 3; tput bold; echo COR LARANJA; tput sgr0

tput bold coloca as letras em negrito, reforçando a cor setada. Nesse caso, a cor usada foi a laranja (código 3)

Sublinhado

$ tput smul; echo sublinhe-me; tput rmul

A opção smul seta o sublinhado no texto e rmul faz o inverso, desligando o atributo de sublinhado.

Tabelinha de cores

A seguir, uma tabelinha de cores sendo que para n,m, n representa a cor da letra e m a cor de fundo.

Tabela Cor tput

Tabela Cores tput

Ex: O código 2,1 é cor verde para a letra (código 2) e cor vermelha de fundo (código 1).

Função colorir

Em Shell Script é sempre útil usar uma função responsável por colorir determinada saída. Eu gosto de utilizar uma função de nome “echocomcor” que simula esse comportamento.

Salve como echocomcor.sh

#!/bin/bash
# [echocomcor.sh]
# Especificação da função echocomcor
#
# uso: echocomcor 'nome_da_cor' texto
#
# onde nome_da_cor é:
#   vermelho
#   verde
#   laranja
#   roxo
#
# OBS: A cor é a cor da letra. A cor de fundo não é modificada.
#      Negrito é usado por padrão.
#
# Sun Oct  6 10:36:55 BRT 2013
#

declare -A arraycores

arraycores['vermelho']=1
arraycores['verde']=2
arraycores['amarelo']=3
arraycores['azul']=4
arraycores['rosa']=5

function echocomcor {
local codigocor=${arraycores[$1]}
shift

if [ $codigocor ]; then
    tput setaf $codigocor; tput bold; echo "$*"; tput sgr0
else
    echo "$*"
fi

}

Para usar, basta chamar o source, passando o nome do arquivo como parâmetro, para que a função seja integrada em seu script.

$ source echocomcor.sh
$ echocomcor 'vermelho' ola mundo
ola mundo
$ echocomcor 'verde' ola mundo
ola mundo
$ echocomcor 'amarelo' ola mundo
ola mundo
$ echocomcor 'azul' ola mundo
ola mundo
$ echocomcor 'rosa' ola mundo
ola mundo

Conclusão

O tput fornece uma maneira mais limpa e portátil para se colorir caracteres em um terminal. Portanto, de agora em diante, prefira o uso de tput ao invés dos caracteres de escape.

Referências

[1] Chapter 6. ANSI Escape Sequences: Colours and Cursor Movement by Giles Orr (Acessado em: Agosto/2013)
http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html

[2] What I learned from other’s shell scripts by Fizer Khan (Acessado em: Agosto/2013)
http://www.fizerkhan.com/blog/posts/What-I-learned-from-other-s-shell-scripts.html

[3] Hack 40. Change the prompt color using tput by RAMESH (Acessado em: Agosto/2013)
http://linux.101hacks.com/ps1-examples/prompt-color-using-tput/

2 pensamentos sobre “Cores Em Shell Scripts Sem Caracteres Escapes (com tput)

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s