unix – 如何通过退出代码发出模式的信号,而不改变STDOUT

前端之家收集整理的这篇文章主要介绍了unix – 如何通过退出代码发出模式的信号,而不改变STDOUT前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要运行cmd1.当且仅当其STDOUT中缺少PATTERN时,我还需要运行cmd2:
  1. cmd1 | grep "$PATTERN" || cmd2

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

我知道我可以这样做:

  1. OUTPUT=`cmd1`
  2. echo "$OUTPUT"
  3. echo "$OUTPUT" | grep -q "$PATTERN" || cmd2

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

如何使用tee将输出发送到tty,如下所示:
  1. cmd1 | tee /dev/tty | grep "$PATTERN" || cmd2

PATTERN匹配cmd1输出的示例:

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

PATTERN不匹配cmd1输出的示例:

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

猜你在找的Bash相关文章