Mensagens coloridas e outras “brincadeiras” no seu terminal, ao estilo dos anos 1970

Que tal deixar seus scripts mais “divertidos”, com mensagens coloridas, negrito, itálico etc? Isso pode parecer irrelevante para quem usa apenas ambiente gráfico, mas para quem passa pelo menos metade do dia usando o terminal, em meio a um “mundo de letras e símbolos”, as cores são bem-vindas para ajudar a destacar algumas informações.

Não é preciso instalar nada em seu ambiente, pois tudo o que se precisa já está no interpretador de comandos do seu ambiente, o SH, Bash, Dash etc.

Usando algumas variáveis de ambiente com sequências de escape ANSI nós poderemos exibir mensagens coloridas a partir dos nossos scripts sem muita dificuldade.

Para saber mais sobre o que são e ter maiores dicas sobre como usar estas “sequências”, recomendo a leitura do texto acima.

Para não complicarmos, nós vamos apenas pegar estas sequencias já prontas e definir algumas variáveis de ambiente e funções que representam estas cores.

Preparando o seu ~/.bashrc

O ~/.bashrc é o arquivo de inicialização principal do interpretador de comandos “Bash”, disponível em praticamente toda distribuição Linux e nos seus primos BSD, mas há outros arquivos como ~/.profile , ~/.bash_profile, ~/.bash_login etc.

Cada distribuição define a estrutura dos seus arquivos de uma forma diferente.

A sugestão pelo .bashrc é por ser o mais comum em distribuições baseadas no Debian, como Mint, Ubuntu etc mas isso não faz diferença.

Consulte os manuais de sua distribuição, verifique qual shell ela usa por padrão e todas as vezes que eu mencionar o .bashrc, entenda que estou me referindo ao seu arquivo de inicialização.

Com isso combinado, copie as declarações de variáveis abaixo e as cole nos seu arquivo de inicialização.

# Cores de frente
export FG_PRETO="\033[30m"
export FG_VERMELHO="\033[31m"
export FG_VERDE="\033[32m"
export FG_AMARELO="\033[33m"
export FG_AZUL="\033[34m"
export FG_MAGENTA="\033[35m"
export FG_CIANO="\033[36m"
export FG_BRANCO="\033[37m"
export FG_CINZA="\033[38m"
export FG_NORMAL="\033[39m"

# Cores de fundo
export BG_PRETO="\033[40m"
export BG_VERMELHO="\033[41m"
export BG_VERDE="\033[42m"
export BG_AMARELO="\033[43m"
export BG_AZUL="\033[44m"
export BG_MAGENTA="\033[45m"
export BG_CIANO="\033[46m"
export BG_BRANCO="\033[47m"
export BG_CINZA="\033[48m"
export BG_NORMAL="\033[49m"

# Atributos de caracteres
export AT_COMUM="\033[0m"
export AT_NEGRITO="\033[1m"
export AT_ESCURO="\033[2m"
export AT_ITALICO="\033[3m"
export AT_SUBLINHADO="\033[4m"
export AT_PISCANTE="\033[5m"
export AT_REVERSO="\033[7m"
export AT_INVISIVEL="\033[8m"
export AT_RISCADO="\033[9m"

Após salvar o arquivo é necessário fechar a sua sessão e reabrí-la novamente, ou se estiver em um ambiente gráfico, basta fechar a aba ou janela do seu terminal e reabri-la novamente.

Usando as cores na prática

Agora que as variáveis com cores estão carregadas, nós só precisamos invocá-las dentro das mensagens que serão coloridas.

Por exemplo, digite a linha de comandos abaixo a partir da sua linha de comandos, ou adicione-a em um arquivo “.sh”, com permissão de execução e rode o script.

echo -e "Arquivo de configuração [${FG_VERDE}OK${FG_NORMAL}]"

O resultado do comando acima será este:

Fig 1: Saída de um script de exemplo usando as variáveis personalizadas de cores

Atente para o uso do parâmetro “-e”, que é obrigatório para que o comando “echo” no BASH, possa interpretar os caracteres da sequência de escape.

Se você usa o “sh” como shell padrão em seus scripts, este parâmetro não será obrigatório.

Veja um outro exemplo mais elaborado:

echo -e "${BG_BRANCO}${FG_VERDE} .: Monitoramento de integridade do sistema :. ${FG_NORMAL}${BG_NORMAL}"
echo -e "${FG_AMARELO}ATENÇÃO${FG_NORMAL} o arquivo ${AT_SUBLINHADO}/etc/fireworks.conf${AT_COMUM} não está configurado corretamente."
Fig 2: Usando cores de letra, cores de fundo e atributos de formatação

Melhorando o uso das cores

Depois de um tempo “brincando” você estará confortável para melhorar o uso das cores no seu ambiente e scripts.

Por exemplo, se desejar, troque o nome das variáveis para algo de seu agrado; adicionar outras cores (sim, podemos usar uma paleta de 256 cores e até mesmo usar RGB com mais de 16 milhões de cores na maioria dos terminais modernos – vide o texto sobre sequências de escape); e o que eu particularmente recomendo, crie funções para auxiliar e simplificar a vida.

Sobre esta última sugestão, eu costumo usar muitas mensagens de status com “OK”, “ATENÇÃO”, “ERRO”, “AVISO” etc. Então já mantenho no meu .bashrc diversas funções para este fim como estas abaixo:

ok() {
  echo -e "[${FG_VERDE}OK${FG_NORMAL}]$1"
}
atencao() {
  echo -e "[${FG_AMARELO}ATENÇÃO${FG_NORMAL}]$1"
}
erro() {
  echo -e "[${FG_VERMELHO}ERRO${FG_NORMAL}]$1"
}
aviso() {
  echo -e "[${FG_AZUL}AVISO${FG_NORMAL}]$1"
}
export -f ok atencao erro aviso

Com estas funções salvas no seu arquivo de inicialização, experimente digitar comandos como estes abaixo, ou colocá-los em um script:

ok " Configuração modificada"
atencao " O sistema precisa ser recarregado"
aviso " Algumas funções não estarão disponíveis"
erro " Não é possível continuar. Saindo"

A saída deverá ser algo como mostrado na imagem abaixo.

Fig 3: Exemplo de uso das funções personalizadas

Crie tantas e quais funções você desejar para facilitar a sua vida. Isso certamente vai ajudá-lo a fazer um melhor uso do seu terminal.

Uma observação que não pode passar desapercebida é o uso do “export -f” após a declaração das funções. Você pode usar como fiz, com todas as funções na mesma declaração, ou se preferir usar uma linha desta após cada função declarando-as individualmente.

Faça como preferir, mas não esqueça de fazê-lo ou as funções não serão exportadas para o seu ambiente e por isso não poderão ser usadas fora do arquivo, onde foram declaradas (~/.bashrc, neste caso).

Finalizando

O uso de cores e demais atributos de formatação no terminal, ajuda a destacar mensagens que são relevantes para o usuário. Use e abuse delas, elas já estão lá e não usá-las é apenas um desperdício de recurso que já está disponível.

Embora a ideia de usar variáveis com caracteres de escape para representar cores não seja um recurso exclusivo do Bash e do sh, alguns “shells” podem ter um método diferente para declarar variáveis e principalmente para exportá-las. Esteja atento.

Se você não quiser alterar os arquivos de inicialização, é possível usar estas variáveis dentro dos seus arquivos de script também, neste caso não precisaria exportá-las, mas isso deixará todos os seus scripts gigantes com várias linhas desnecessariamente redundantes.

Depois do primeiro uso, se você empolgar com a ideia e começar a criar funções diversas e que precisarão estar em vários computadores diferentes, logo logo você estará precisando usar algum recurso para gerenciamento de dotfiles, embora isso seja tema para outro texto, eu uso um método que criei a algum tempo e está disponível no Github. Se quiser usá-lo e sugerir melhorias, esteja a vontade.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.