Answers:
许多生成彩色输出的程序会检测是否正在写入TTY,否则会关闭颜色。这是因为当您只想捕获文本时,颜色代码很烦人,因此它们会尝试自动“执行正确的操作”。
从这样的程序捕获颜色输出的最简单方法是,即使未与TTY连接,也要告诉它写入颜色。您必须阅读该程序的文档,以了解它是否具有该选项。(例如,grep
可以--color=always
选择。)
您还可以使用expect
脚本unbuffer
创建一个伪tty,如下所示:
echo barney | unbuffer grep barney | sed -n 1,$\ p
unbuffer
信息,它对我IRC bot的输出像在shell中的输出一样有帮助。
这个对我有用 ;-!(在当前的MingW环境中)
echo barney | grep --color=always barney | sed -n '1,$p'
**barney**
#barney显示为红色文本
$ grep --version
GNU grep 2.5.4
$ sed --version
GNU sed version 4.2.1
tree
is colorized a-la dircolors if the LS_COLORS environment variable is set and output is to tty
……也许(?)有一种方法可以欺骗管道以使其认为它正在输出到TTY ..或某些常规的解决方法。 。
man tree
……它也有一个类似的选择,-C
……也许这是输出颜色转义代码的程序的共同功能
less
可以接受彩色文本输入(不错:)...例如:tree -C ~/ |less -R
或ls -lR --color=always . |less -R