Às vezes, quero canalizar a saída com código de cores para um processo, por exemplo. grep ... mas quando o canalizo para outro processo, por exemplo. sed, os códigos de cores são perdidos ...
Existe alguma maneira de manter esses códigos intactos?
Aqui está um exemplo que perde a saída colorida:
echo barney | grep barney | sed -n 1,$\ p
command-line
colors
pipe
escape-characters
Peter.O
fonte
fonte
less
a entrada pode aceitar colorizado texto (nice :) ... por exemplo:tree -C ~/ |less -R
ouls -lR --color=always . |less -R
Respostas:
Muitos programas que geram saída colorida detectam se estão gravando em um TTY e desativam as cores se não estiverem. Isso ocorre porque os códigos de cores são irritantes quando você deseja capturar apenas o texto, então eles tentam "fazer a coisa certa" automaticamente.
A maneira mais simples de capturar a saída em cores de um programa como esse é pedir para ele escrever cores, mesmo que não esteja conectado a um TTY. Você precisará ler a documentação do programa para descobrir se ele possui essa opção. (por exemplo,
grep
tem a--color=always
opção.)Você também pode usar o
expect
scriptunbuffer
para criar um pseudo-tty como este:fonte
stdout
está indo. Na verdade, não tenho certeza seunbuffer
funciona quando você está entrando no programa e fora dele; Não o tenho instalado aqui para tentar.unbuffer
informações, ele ajuda a saída do meu bot de IRC como a saída no shell.Funciona para mim ;-! (no ambiente atual do MingW)
# barney é exibido como texto em vermelho
fonte
tree
is colorized a-la dircolors if the LS_COLORS environment variable is set and output is to tty
... Talvez (?) Exista uma maneira de enganar um canal para pensar que está sendo transmitido para um TTY ... ou para alguma solução geral desse tipo. .man tree
... Ele também tem uma opção semelhante,-C
... talvez seja uma característica comum para os programas que códigos de escape de cor de saída ..