通常、次のような単純な煙テストスクリプトがあります。
set -e
run-command
run-other-command
echo ok
これは、コマンドが成功すると予想されるときに完全に機能します。失敗した場合、set -e
スクリプトはゼロ以外の終了コードで早く終了します。
しかし、時にはコマンドが失敗することを期待し、スクリプトが別の方法で終了することを望んでいます(たとえば、コマンドがコード0で終了した場合など)。私は次のように書くことができると思いました。
set -e
run-command-that-succeeds
! run-command-that-fails
ただし、これは終了コードを無視します。 Bashのマニュアルページでは、次のように説明しますset -e
。
コマンドの戻り値が!で否定されると、シェルは終了しません[...]
有効な選択肢は次のとおりです。
set -e
! run-command-that-fails
[[ $? -eq 0 ]]
そして
set -e
if run-command-that-fails; then
exit 1
fi
これが最良のオプションですか、それともコマンドが成功したときに終了するよりも寛容な選択肢がありますか?
ベストアンサー1
私のテストによると、これは(! run-command-that-fails)
解決策です。run-command-that-fails
サブシェルで実行されます。
run-command-that-fails
何らかの理由でプライマリシェルで実行する必要がある場合は、別のソリューションが必要です。私はそれだった{ ! run-command-that-fails; }
ことに気づいた。いいえ一方通行。