Exibir arquivo com cores ANSI

Exibir arquivo com cores ANSI

Eu tenho um arquivo com cores ANSI.

teste.txt:
\e[0;31mExample\e[0m

Gostaria de exibir o conteúdo deste arquivo em um terminal, como catfaz, mas também gostaria de exibir as cores.

Responder1

Eu estava procurando uma solução para essa questão exata do bash. Quase perdi o comentário de @Thomas Dickey, que me forneceu a solução mais elegante.

echo -e $(cat test.txt)

Algumas coisas que não funcionaram para mim são (aparentemente você não pode canalizar as coisas para ecoar)

cat test.txt | echo -e

ou

less -R test.txt

Outro problema que tive foi que echo -e não imprimiu bem novas linhas e espaços em branco contíguos no arquivo. Para imprimi-los, usei o seguinte.

echo -ne $(cat test.txt | sed  's/$/\\n/' | sed 's/ /\\a /g')

Isso funciona para um arquivo test.txt contendo

\e[0;31mExa         mple\e[0m
\e[0;31mExample line2\e[0m

Responder2

Se você não estiver vendo a cor dos catcaracteres de controle, provavelmente não estão intactos.

Algumas ferramentas eliminam os caracteres de controle, mas os deixam no final.

Comparar:

 echo -e "\e[0;31mExample\e[0m foo"

para

 echo -e "[0;31mExample[0m foo" 

Você pode reconstruir a sequência de controle a partir do que sobrou, embora não seja à prova de erros, pois o regex usado pode acidentalmente extrair sequências de caracteres não intencionais, etc.

echo -e "[0;31mExample[0m foo" | sed "s:\[\([0-9]*[;m]\):^[[\1:g"

restauraria a cor da string de exemplo.

Responder3

Existe um pacote que contém um executável que faz especificamente isso:

ttyrec

Você pode instalá-lo em instalações Linux derivadas do Debian com

sudo apt install ttyrec

ou nos RedHat com

sudo yum install ttyrec

O comando para reproduzir um arquivo corretamente é executado com

ttyplay <filename>

Verifique também um pacote chamado tty2gif, que converte arquivos semelhantes em gif.

Responder4

Deve funcionar por padrão. Por exemplo, se eu fizer ls --color=always > /tmp/ae então cat /tmp/a, vejo as cores. Verificar com odconfirma que o arquivo usa cores ANSI.

Então acho que você deveria verificar se o seu terminal suporta cores ANSI (e elas estão habilitadas).

informação relacionada