在 systemctl 状态下使用 grep 保留颜色输出

在 systemctl 状态下使用 grep 保留颜色输出

我正在尝试使用 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=nevergrep不会覆盖 生成的一些绿色。关键是打印到管道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

相关内容