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

我需要运行cmd1 。 当且仅当从STDOUT中缺lessPATTERN时,我也需要运行cmd2

 cmd1 | grep "$PATTERN" || cmd2 

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

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

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

但是这会将STDOUT与STDERR分开。 另外,我宁愿有一个方便的一行。 所以我正在寻找一个grep的选项,或者替代grep,说:“ 不要过滤,只需设置退出代码 ”。

如何使用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 

PATTERNcmd1的输出不匹配的示例:

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