Pipe

檢查管道命令是否失敗

  • September 5, 2017

可能重複:

獲取通過管道傳輸到另一個程序的退出程式碼

如果我將一個命令的輸出通過管道傳輸到另一個命令,有沒有辦法讓我明確檢查第一個命令是否失敗?

例如,如果prog處理一個文件並輸出到 STDOUT:

prog file1 | cmp - file2

有沒有辦法檢查是否prog明確失敗或成功(通過返回碼)?我想避免使用臨時文件,不想依賴第二個命令的輸出;所以,對於上面的例子,我想避免檢查輸出cmp以確定是否prog失敗(如果我的問題沒有肯定的答案,我會回過頭來做那個)。

你想要set -o pipefail

從 Bash 聯機幫助頁:

pipefail

If set, the return value of a  pipeline  is  the value  of
the  last (rightmost) command to exit with a non-zero status,
or zero if all  commands in  the pipeline exit successfully.
This option is disabled by default.

引用自:https://unix.stackexchange.com/questions/39837