
シェル スクリプトに次のような 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 のスクリプトに依存します。これでゼロ以外の値が返されるのは確かですか?
./run-tests.sh
$をエコーしますか?