如何获取grep退出代码但打印所有行?

l0b*_*0b0 5 grep shell-script text-processing

我想检查命令打印的行是否包含错误消息,但我还想打印命令的所有输出(用于make日志)。有没有办法根据该输出的内容获取命令的所有输出(未修改)和退出代码?我能想到的最接近的解决方法是my_command | grep -C 99999999 '^Error'.

这与此问题相似但不同,因为我关心退出代码并且不想着色。

rus*_*ush 6

使用tee并将其重定向到 stderr

my_command | tee /dev/stderr | grep -q '^Error'
Run Code Online (Sandbox Code Playgroud)

它将保存grep退出状态并将所有输出复制到控制台中可见的 stderr。如果您在标准输出中需要它,您可以稍后像这样将其重定向到那里:

( my_command | tee /dev/stderr | grep -q '^Error' ) 2>&1
Run Code Online (Sandbox Code Playgroud)

请注意,它grep不会输出任何内容,但它会在tee.