Unix

如何在不更改 STDOUT 的情況下通過退出程式碼表示模式的存在

  • March 23, 2017

我需要跑步cmd1。當且僅當其 STDOUT 中缺少 PATTERN 時,我也需要執行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

PATTERN輸出不匹配的範例cmd1

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

引用自:https://serverfault.com/questions/840120