如果按順序表示管道,那麼您需要在set -o pipefail
等腳本中設置pipefail
。從man bash
:
管道的返回狀態是最後一個命令的退出狀態, 除非pipefail選項啓用 。如果啓用了pipefail,則管道的返回狀態是以非零狀態退出的最後(最右邊) 命令的值,如果所有命令均成功退出,則爲零。如果保留 一詞!在流水線之前,該流水線的退出狀態是如上所述的退出 狀態的邏輯否定。在等待 返回值之前,shell等待管道中的所有命令終止。
如果您只是表示順序命令,那麼只需檢查每個命令的退出狀態並設置一個標誌,如果退出狀態爲非零。讓你的腳本返回標誌的值,如:
#!/bin/bash
EXIT=0
grep -q A <<< 'ABC' || EXIT=$? # Will exit with 0
grep -q a <<< 'ABC' || EXIT=$? # Will exit with 1
grep -q A <<< 'ABC' || EXIT=$? # Will exit with 0
echo $EXIT # Will print 1
exit $EXIT # Exit status of script will be 1
這將使用邏輯運算符OR ||
僅如果命令失敗,設置EXIT
。如果多個命令失敗,那麼腳本會返回上一個失敗命令的退出狀態。
如果這些命令沒有在後臺運行,則wait
與此處不相關。
也許這是http://stackoverflow.com/questions/3474526/stop-on-first-error是你想要的? –
@Marian Theisen不,腳本不能停在第一個錯誤。無論前一個命令返回的狀態如何,腳本中的所有命令都需要運行。 –