Pipe
如何檢查管道上的第一個命令是否出錯?
假設我在終端上執行以下命令:
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 手冊頁:
管道故障
如果設置,則管道的返回值是以非零狀態退出的最後一個(最右邊)命令的值,如果管道中的所有命令成功退出,則返回零。預設情況下禁用此選項。