我需要运行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