我有一个 ANSI 颜色的文件。
测试.txt:
\e[0;31mExample\e[0m
我想在终端中显示该文件的内容,就像cat
那样,但我也想显示颜色。
答案1
我正在寻找这个确切的 bash 问题的解决方案。我差点错过了@Thomas Dickey 的评论,它为我提供了最优雅的解决方案。
echo -e $(cat test.txt)
有些对我不起作用的事情是(显然你不能通过管道来回显)
cat test.txt | echo -e
或者
less -R test.txt
我遇到的另一个问题是 echo -e 没有很好地打印文件中的换行符和连续空格。为了打印这些,我使用了以下内容。
echo -ne $(cat test.txt | sed 's/$/\\n/' | sed 's/ /\\a /g')
这适用于包含以下内容的 test.txt 文件
\e[0;31mExa mple\e[0m
\e[0;31mExample line2\e[0m
答案2
如果您没有看到cat
控制字符的颜色可能不完整。
有些工具会删除控制字符,但保留在尾部。
比较:
echo -e "\e[0;31mExample\e[0m foo"
到
echo -e "[0;31mExample[0m foo"
您也许能够从剩下的内容重建控制序列,尽管这并不是万无一失的,因为您使用的正则表达式可能会意外地引入意外的字符序列等。但例如:
echo -e "[0;31mExample[0m foo" | sed "s:\[\([0-9]*[;m]\):^[[\1:g"
会将颜色恢复到示例字符串。
答案3
有一个包包含专门执行此操作的可执行文件:
ttyrec
您可以使用以下任一命令将其安装在 Debian 派生的 Linux 安装上:
sudo apt install ttyrec
或者在 RedHat 上
sudo yum install ttyrec
正确重播文件的命令是用
ttyplay <filename>
另请查看名为 tty2gif 的包,它将类似的文件转换为 gif。
答案4
它应该默认工作。例如,如果我这样做ls --color=always > /tmp/a
,cat /tmp/a
我就会看到颜色。检查od
确认该文件使用 ANSI 颜色。
所以我认为你应该检查你的终端是否支持 ANSI 颜色(并且它们已启用)。