我正在尝试使用 grep 获取此命令输出的原始颜色:
sudo systemctl status telegraf | grep -e ● -e Active
使用此命令输出为红色,但我希望它与原始颜色匹配,在这种情况下,当服务处于活动状态时为绿色,当服务处于非活动状态时为红色或无颜色。
我按照这里所述尝试过: https://unix.stackexchange.com/questions/75527/how-can-i-keep-color-codes-with-grep-input,但这似乎只适用于 ls 命令。
sudo systemctl status telegraf --color=always | grep --color=never -e ● -e Active
这将引发一个错误:systemctl: unrecognized option '--color=always'
这当然没有任何颜色:sudo systemctl status telegraf | grep --color=never -e ● -e Active
如果有人知道我该怎么做才能实现原始颜色输出,那就太好了。
提前致谢。
答案1
当您观察到红色时,它来自grep
。您可以(并且已经)使用 将其关闭grep --color=never …
。无论是这种红色还是--color=never
都grep
不会覆盖 生成的一些绿色。关键是打印到管道systemctl
时没有绿色;这是这里的主要问题。systemctl
如果您设法将systemctl
印刷品变成绿色到管道,那么您grep --color=never …
就不会改变颜色。
有办法。我从对类似问题的回答。
sudo SYSTEMD_COLORS=1 systemctl status telegraf | grep --color=never -e ● -e Active
另一个问题不涉及sudo
。在你的情况下sudo
可能会干扰。它可能允许或不允许你以上述方式设置变量(或变量)。它可能允许或不允许你以其他方式传递它:
SYSTEMD_COLORS=1 sudo -E systemctl status telegraf | grep --color=never -e ● -e Active
查看他们man 8 sudo
提到man 5 sudoers
环境的位置。可能是您的sudo
配置无论如何都会清理环境;在这种情况下,请尝试以下操作:
sudo sh -c 'SYSTEMD_COLORS=1 systemctl status telegraf' | grep --color=never -e ● -e Active
你真的需要sudo
调用吗systemctl status …
?也许你可以简单地做到这一点,而不用sudo
:
SYSTEMD_COLORS=1 systemctl status telegraf | grep --color=never -e ● -e Active