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 cat
faz, 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 cat
caracteres 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/a
e então cat /tmp/a
, vejo as cores. Verificar com od
confirma 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).