No seu script, essas atribuições
normal='\e[0m'
yellow='\e[33m'
coloque os caracteres literalmente nas variáveis, ou seja, \ e [ 0 m , em vez da sequência de escape. Você pode construir um caractere de escape usando printf
(ou algumas versões de echo
), por exemplo,
normal=$(printf '3[0m')
yellow=$(printf '3[33m')
mas você faria muito melhor usar tput
, pois isso funcionará para qualquer terminal configurado corretamente:
normal=$(tput sgr0)
yellow=$(tput setaf 3)
Olhando para o seu exemplo, parece que a versão de printf
que você está usando trata \e
como o caractere de escape (que pode funcionar em seu sistema, mas geralmente não é portável para outros sistemas). Para ver isso, tente
yellow='\e[33m'
printf 'Yellow:%s\n' $yellow
e você veria os caracteres literal :
Yellow:\e[33m
em vez da sequência de escape. Colocá-los no formato printf
informa ao printf
para interpretá-los (se puder).
Leitura adicional: