Não é exatamente engolido, mas você pode removê-los com a expansão de parâmetros:
str='Hello \e[31mc\e[32mo\e[33ml\e[34mo\e[35mr\e[m world'
# colorful output
echo -e "$str"
# colorless output
echo -e "${str//\e\[+([0-9;])m}"
O acima em bash
requer que a opção extglob
shell esteja ativada. ( shopt -s extglob
)
Para facilitar o uso, defina uma função:
function ecco() { [ -t 1 ] && echo -e "$1" || echo -e "${1//\e\[+([0-9;])m}"; }
Então você acabou de ligar:
ecco 'Hello \e[31mc\e[32mo\e[33ml\e[34mo\e[35mr\e[m world'
Para verificar se funciona, basta redirecionar sua saída e as cores desaparecerão:
ecco 'Hello \e[31mc\e[32mo\e[33ml\e[34mo\e[35mr\e[m world' | cat