コマンドが成功すると、bashスクリプトを終了します。

コマンドが成功すると、bashスクリプトを終了します。

通常、次のような単純な煙テストスクリプトがあります。

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; }ことに気づいた。いいえ一方通行。

おすすめ記事