Pipe

如何檢查管道上的第一個命令是否出錯?

  • May 5, 2022

假設我在終端上執行以下命令:

this-command-doesnt-exist-and-closes-with-code-127 | jq ''

如果我執行echo $?,我會得到0結果,因為它正在檢查jq. 我想知道管道上第一個命令的退出程式碼。我想過像這樣重定向標準錯誤:

this-command-doesnt-exist-and-closes-with-1 2>&1 | jq ''
if [ $? != 0 ]; then
   echo "I got an error"
fi

就這樣我發送了一條沒有意義的消息jq。它可以解決問題,但看起來不是正確的解決方案。如何管理獲取管道上命令的錯誤程式碼?

如果您正在使用bash,您可以使用set -o pipefail

$ set -o pipefail
$ this-command-doesnt-exist-and-closes-with-code-127 | jq ''
bash: this-command-doesnt-exist-and-closes-with-code-127: command not found...
$ echo $?
127

bash 手冊頁

管道故障

如果設置,則管道的返回值是以非零狀態退出的最後一個(最右邊)命令的值,如果管道中的所有命令成功退出,則返回零。預設情況下禁用此選項。

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