Pet*_*r.O 41 command-line colors pipe escape-characters
有时我想通过管道传输进程的颜色编码输出,例如。grep ...但是当我将它输送到另一个进程时,例如。sed,颜色代码丢失了......
有什么方法可以保持这些代码完好无损吗?
这是一个丢失彩色输出的示例:
echo barney | grep barney | sed -n 1,$\ p
Run Code Online (Sandbox Code Playgroud)
cjm*_*cjm 46
许多生成彩色输出的程序会检测它们是否正在写入 TTY,如果不是,则关闭颜色。这是因为当您只想捕获文本时,颜色代码很烦人,因此它们会尝试自动“做正确的事情”。
从这样的程序中捕获颜色输出的最简单方法是告诉它即使没有连接到 TTY 也写颜色。您必须阅读该程序的文档以了解它是否具有该选项。(例如,grep
有--color=always
选择权。)
您还可以使用该expect
脚本unbuffer
来创建这样的伪 tty:
echo barney | unbuffer grep barney | sed -n 1,$\ p
Run Code Online (Sandbox Code Playgroud)