當子指令出錯時,如何解決 Bash for 迴圈不退出的問題?

當子指令出錯時,如何解決 Bash for 迴圈不退出的問題?

我在 shell 腳本中有一個 for 迴圈:

#!/bin/bash
set -u
set -e
for l in sh rb py php java cs; do
  (cd $l; ./run-tests.sh)
done

其目的是當任何一個子命令出現類似錯誤時,讓 for 循環在火災中死亡。

現在,我有了一個解決方法:(cd $l; ./run-tests.sh) || die "Message here"以及die.然而,我真的很好奇為什麼 for 迴圈不會按照「set -e」指令設定的期望自行終止?理想情況下,我不想對每個 for 迴圈進行特殊處理。 :)

答案1

set -e如果失敗則不會立即退出的原因./run-test.sh是以下幾行:

for l in sh rb py php java cs; do
  (cd $l; ./run-tests.sh)
done

對於複合語句。此複合語句的狀態是上次運作的狀態./run-tests.sh

你的工作對我來說聽起來不錯。

答案2

我沒有評論權,所以在這裡發布。這取決於run-tests.sh中的腳本。您確定這給了非零值嗎:

./運行測試.sh

迴聲$?

相關內容