
我在 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
迴聲$?