当我通过管道传输到另一个进程时,我的 ANSI 转义码去了哪里?我可以保留它们吗?

当我通过管道传输到另一个进程时,我的 ANSI 转义码去了哪里?我可以保留它们吗?

有时我想通过管道传输进程的颜色编码输出,例如。 grep ...但是当我将它传送到另一个进程时,例如。 sed,颜色代码丢失......

有什么方法可以保持这些代码完整吗?

这是一个丢失彩色输出的示例:

echo barney | grep barney | sed -n 1,$\ p   

答案1

许多生成彩色输出的程序会检测它们是否正在写入 TTY,如果不是,则关闭颜色。这是因为当您只想捕获文本时,颜色代码很烦人,因此它们会尝试自动“做正确的事情”。

从此类程序捕获颜色输出的最简单方法是告诉它写入颜色,即使它没有连接到 TTY。您必须阅读该程序的文档以了解它是否有该选项。 (例如,grep--color=always选项。)

您还可以使用expect脚本unbuffer创建一个像这样的伪 tty:

echo barney | unbuffer grep barney | sed -n 1,$\ p

答案2

这个对我有用 ;-! (在当前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

相关内容