Muitos programas que geram saída colorida detectam se estão gravando em um TTY, e desativam cores se não estiverem. Isso ocorre porque os códigos de cores são irritantes quando você quer apenas capturar o texto, então eles tentam "fazer a coisa certa" automaticamente.
A maneira mais simples de capturar a saída de cores de um programa como esse é dizer a ele para escrever cores, mesmo que não esteja conectado a um TTY. Você terá que ler a documentação do programa para descobrir se tem essa opção. (por exemplo, grep
tem a opção --color=always
.)
Você também pode usar o script expect
unbuffer
para criar um pseudo-tty assim:
echo barney | unbuffer grep barney | sed -n 1,$\ p