Eu tenho um arquivo com cores ANSI.
test.txt:
\e[0;31mExample\e[0m
Gostaria de exibir o conteúdo desse arquivo em um terminal, como o catfaz, mas gostaria de exibir as cores também.
catimpressão?
echo -e $(cat test.txt).
Eu tenho um arquivo com cores ANSI.
test.txt:
\e[0;31mExample\e[0m
Gostaria de exibir o conteúdo desse arquivo em um terminal, como o catfaz, mas gostaria de exibir as cores também.
catimpressão?
echo -e $(cat test.txt).
Respostas:
Eu estava procurando uma solução para essa pergunta exata do bash. Quase senti falta do 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 fazer coisas ecoarem)
cat test.txt | echo -e
ou
less -R test.txt
Outro problema que tive foi que echo -e não imprimia novas linhas e espaços em branco contíguos no arquivo. Para imprimi-las, usei o seguinte.
echo -ne $(cat test.txt | sed 's/$/\\n/' | sed 's/ /\\a /g')
Isso funciona para um arquivo test.txt que contém
\e[0;31mExa mple\e[0m
\e[0;31mExample line2\e[0m
\atoca a campainha para mim. Mudei seu segundo comando sed para o sed 's/ /\\033\\a /g'qual não toca a campainha.
$(cat file.txt)aspas duplas e adicionar uma nova linha no final - não há necessidade de sed-so: echo -ne "$(<file.txt)" \\nou echo -ne "$(cat <<"EOF" . . . EOF)" \\n. Isso também impede que o bash execute expansão glob no texto.
Se você não vê a cor dos catcaracteres de controle, provavelmente não está intacto.
Algumas ferramentas retiram os caracteres de controle, mas saem 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 do que resta, embora não seja à prova de idiotas, pois o regex que você usa pode acidentalmente atrair sequências de caracteres não intencionais etc. Mas, por exemplo:
echo -e "[0;31mExample[0m foo" | sed "s:\[\([0-9]*[;m]\):^[[\1:g"
restauraria a cor na sequência de exemplo.
Deve funcionar por padrão. Por exemplo, se eu faço ls --color=always > /tmp/ae depois cat /tmp/a, vejo as cores. A verificação com odconfirma que o arquivo usa cores ANSI.
Então, acho que você deve verificar se o seu terminal suporta cores ANSI (e elas estão ativadas).
less -R, por exemplo.