如何通过退出代码来表示模式的存在,而不改变 STDOUT

如何通过退出代码来表示模式的存在,而不改变 STDOUT

我需要运行cmd1。当且仅当 PATTERN 在其 STDOUT 中缺失时,我cmd2也需要运行:

cmd1 | grep "$PATTERN"  ||  cmd2

但我希望看到全部来自 cmd1 的输出,而不仅仅是与 PATTERN 匹配的行。

我知道我可以做这样的事情:

OUTPUT=`cmd1`
echo "$OUTPUT"
echo "$OUTPUT" | grep -q "$PATTERN"  ||  cmd2

但这会将 STDOUT 与 STDERR 分开。另外,我更希望有一个方便的单行代码。所以我在 grep 中寻找一个选项,或者 grep 的替代选项,说“不过滤,只设置退出代码“。

答案1

如何使用tee将输出发送到 tty 像这样:

cmd1 | tee /dev/tty | grep "$PATTERN"  ||  cmd2

PATTERN匹配的cmd1输出示例:

% echo "cmd1 output" | tee /dev/tty | grep -q "output" || echo "nothing matches PATTERN"
cmd1 output

PATTERN不匹配的cmd1输出示例:

% echo "cmd1 output" | tee /dev/tty | grep -q "outputttt" || echo "nothing matches PATTERN"
cmd1 output
nothing matches PATTERN

相关内容