Unix
如何在不更改 STDOUT 的情況下通過退出程式碼表示模式的存在
我需要跑步
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