如何在通过grep等命令管道传输后保留命令的彩色输出
保留systemctl管道输出中的彩色状态标识
问题出在systemctl这类命令的彩色输出逻辑:它们会自动检测输出目标是不是终端(TTY),如果是管道或者文件,就会默认关闭彩色输出——所以光给grep加--color参数没用,得先让systemctl强制输出颜色。
下面是两种可行的解决方法:
方法一:强制systemctl输出彩色
直接给systemctl添加--color=always参数,让它不管输出到哪里都保留ANSI颜色控制码,再配合grep的参数控制是否叠加高亮:
- 只保留systemctl原有的颜色,不需要grep高亮匹配内容:
systemctl --color=always status weechat | grep --color=never Active - 同时保留systemctl的颜色,且让grep高亮匹配的"Active":
systemctl --color=always status weechat | grep --color=auto Active
方法二:用unbuffer模拟终端环境
如果不想给每个命令加参数,可以用unbuffer工具(属于expect工具包,需先安装),它能让上游命令误以为输出到终端,从而自动启用彩色输出:
unbuffer systemctl status weechat | grep Active
如果需要grep保留自身的高亮,同样可以加--color=auto参数。
内容的提问来源于stack exchange,提问作者r01_mage
相关产品推荐
相关产品推荐

