Resposta curta e simples
Use tput setaf $COLOUR_CODE
para gerar saída colorida. Substitua $COLOUR_CODE
por um inteiro entre 1
e 8
, pertencentes a 8 cores básicas (mapeadas para as sequências \e[31m
a \e[38m
, respectivamente.
Então, no caso do seu script:
# Color variables
n='tput sgr0'
b='tput bold'
r='tput setaf 1'
a='tput setaf 6'
Explicações mais detalhadas
Primeiro, nunca use echo
para gerar seqüências de escape como "\e[31m"
. O comando é um trem-wreck da portabilidade , e seus -n -e
switches não são universalmente suportados. Use printf
em vez disso:
printf '\e[31m'
Isso vale para outros escapes no estilo C como \n
e \t
:
# Using Bash (Linux)
$ echo "foo\nbar"
foo\nbar
# Using Ksh (*BSD)
$ echo "foo\nbar"
foo
bar
Em segundo lugar, códigos de escape ANSI de codificação rígida não é a melhor maneira de gerar saída colorida. O comando tput(1)
existe para este propósito:
tput setaf 2 # Generates green text
tput bold # Generate bold text
tput sgr0 # Reset those fancy effects
# To use them as variables:
bold=$(tput bold)
green=$(tput setaf 2)
reset=$(tput sgr0)
echo "${bold}HEADING${reset}"
Em terceiro lugar, é importante entender que a saída do terminal colorido não é universal entre sistemas, emuladores de terminal ou hardware. tput
pode nem estar disponível em algumas circunstâncias, e confiar no destaque para tornar o texto TTY legível é uma prática ruim.