Introdução
A echo
comando gera uma determinada string para o tubo de saída padrão, normalmente apontando para o terminal. Embora o tubo de saída padrão possa apontar para outras interfaces – o echo
O comando normalmente é usado para imprimir e exibir mensagens no terminal. Por padrão, o texto da mensagem exibida herda a cor de outro texto no terminal (que é personalizável por si só). No entanto – existem várias maneiras de alterar a cor de saída de echo
– tanto para strings individuais quanto para mensagens inteiras.
Neste pequeno guia, veremos como você pode alterar a cor de saída de
echo
em sistemas baseados em Linux, usando códigos de escape ANSI,tput
e como você pode tornar esse processo menos detalhado em scripts Bash.
Alterar a cor de saída com códigos de escape ANSI
A maneira mais fácil de alterar a cor é através de sequências/códigos de escape ANSI. Todos os códigos de escape ANSI começam com o Escape
caractere, que pode ser representado em vários formatos – 27
em decimal, x1B
em hexadecimal, como a chave de controle ^[
ou 33
em formato octal. As sequências são seguidas pelo comando:
33[command
Onde o suporte de abertura (Introdutor de Sequência de Controle) é opcional, mas ajuda a separar o comando do caractere de escape. Quando você coloca um código de cores como o comando, ele altera a cor do texto que se aproxima:
33[0;34
0;34
é o código para a cor azul, por exemplo. Só com isso, você pode alterar a cor do texto em echo
com:
33[0;34Text
Onde Text
seria de cor azul. Como alternativa, considere um script bash simples para imprimir "Bem vindo a Franca" nas cores da bandeira francesa:
#!/bin/bash
BLUE='33[0;34m'
WHITE= '33[0;37m'
RED= '33[0;31m'
echo -e "${Blue}Welcome ${WHITE}to ${RED}France"
O opcional -e
bandeira do echo
comando permite que você use caracteres especiais como n
(nova linha) e t
(tab) dentro da string de entrada.
Depois de executar o script:
$ ./colors.sh
Isso resulta em:
Os códigos ANSI não se limitam à cor – mas também podem ser aplicados ao estilo. Os códigos 0..9
representam estilos de texto, enquanto os códigos 30...37
representam cores:
Cor | códigos | Estilos de Texto | códigos |
Preto | 30 | Texto simples | 0 |
Vermelho | 31 | Texto em negrito | 1 |
Verde | 32 | Texto de baixa intensidade | 2 |
Castanho / Laranja | 33 | Texto sublinhado | 4 |
Azul | 34 | Texto piscando | 5 |
Roxa | 35 | Texto invisível | 8 |
Ciano | 36 | Texto tachado | 9 |
Cinza Claro | 37 |
Vamos criar um script bash para explorar algumas dessas opções:
#!/bin/bash
echo -e "33[0;33mSample text"
echo -e "33[1;33mBold text"
echo -e "33[2;33mLow intensity text"
echo -e "33[4;33mUnderline text"
echo -e "33[5;33mBlinking text"
echo -e "33[8;33mInvisible text"
echo -e "33[9;33mStrikethrough text"
A execução deste script resulta em:
Confira nosso guia prático e prático para aprender Git, com práticas recomendadas, padrões aceitos pelo setor e folha de dicas incluída. Pare de pesquisar comandos Git no Google e realmente aprender -lo!
Da mesma forma, você pode alterar a cor de fundo desses textos usando códigos 40..47
:
cor | códigos |
Preto | 40 |
Vermelho | 41 |
Verde | 42 |
Castanho / Laranja | 43 |
Azul | 44 |
Roxa | 45 |
Ciano | 46 |
Cinza Claro | 47 |
Alterar o plano de fundo de uma determinada string se resume à mesma regra de alterar a cor da fonte – o próprio código altera o comportamento:
#!/bin/bash
BLUE='33[0;44m'
BLACK='33[0;30m'
WHITE='33[0;30;47m'
RED='33[0;41m'
echo -e "${BLUE}Welcome ${WHITE}to ${RED}France"
Observação: Como regra geral – você pode traduzir cores de fonte para cores de fundo adicionando 10. 30
é a cor da fonte preta, 40
é a cor de fundo preto.
Altere a cor de saída com o tput
Uma alternativa aos códigos ANSI é usar o tput
comando:
$ tput setaf color_code
setf
permite 8 cores, enquanto setaf
permite 256 cores, então dependendo do comando que você está usando, você pode ir entre 0..7
e 0..255
como os códigos de cores. Ambos comandos dedicam 0..7
com os mesmos códigos de cores, enquanto com setaf
, 8..15
são cores de alta intensidade, e 16..231
são tons diferentes dos 8 primeiros, e 232..255
são cores em tons de cinza:
Crédito: Wikipedia
Finalmente, tput
também permite alterar a cor de fundo, adicionar negrito, diminuir a intensidade, etc. com outros comandos:
Estilos de Texto | comandos |
Cor do primeiro plano | conjunto |
Cor de fundo | conjunto |
Sem estilo | sgv0 |
Texto em negrito | pino |
Texto de baixa intensidade | escurecer |
Texto sublinhado | smul |
Texto piscando | piscar |
Texto reverso | rev |
Vamos criar outro script que usa tput
para alterar a cor de saída echo
:
#!/bin/bash
YELLOW=`tput setaf 3`
echo "${YELLOW}Changing"
WHITE=`tput setaf 7 bold`
echo "${WHITE}Colors"
BLUE=`tput setaf 4 smul`
echo "${BLUE}With tput"
CYAN=`tput setaf 6 blink`
echo "${CYAN}is less"
RED=`tput setab 1 setaf 7`
echo "${RED}verbose!"
Este script imprimirá a seguinte saída no terminal:
O comando tput oferece uma maneira fácil de imprimir qualquer cor por meio de um código de cores simples. Vamos agora criar um script que possa imprimir todos os códigos de cores disponíveis para o comando tput:
#!/bin/bash
tput init
end = $ (($ (tput colors) - 1))
w = 1
for c
in $ (seq 0 $end)
do
eval "$(printf " tput setaf % 3 s " " $c ")"
echo - n "$_"
[[$c - ge $ ((w * 2))]]
offset = 2 || offset = 0
[[$ (((c + offset) % (w - offset))) - eq $ (((w - offset) - 1))]]
echo
done
tput init
Irá imprimir de 0 a 255 cores e seus códigos:
Conclusão
Neste pequeno guia - vimos como você pode alterar a cor de echo
's no Linux - usando ANSI Escape Sequences e o tput
comando.
Também exploramos como você pode tornar o processo menos detalhado usando variáveis Bash, ajustar cores de fundo e estilo de texto.