
set -e コマンドは、いずれかのコマンドがゼロ以外の終了コードを返した場合に、bash スクリプトを直ちに失敗させます。
スクリプト内の個々のコマンドに対してこの動作を無効にする簡単でエレガントな方法はありますか?
この機能はBashリファレンスマニュアルのどこに記載されていますか(http://www.gnu.org/software/bash/manual/bashref.html)?
答え1
このようなもの:
#!/usr/bin/env bash set -e echo hi # disable exitting on error temporarily set +e aoeuidhtn echo next line # bring it back set -e ao echo next line
走る:
$ ./test.sh hi ./test.sh: line 7: aoeuidhtn: command not found next line ./test.sh: line 11: ao: command not found
set
組み込みヘルプに説明されています:$ type set set is a shell builtin $ help set (...) Using + rather than - causes these flags to be turned off.
同じことがここにも記載されています:https://www.gnu.org/software/bash/manual/bashref.html#The-Set-Builtin。
答え2
エラー時の救済の設定を解除する代わりに、何があっても成功を強制することもできます。次のようにします。
cmd_to_run || true
0(true)を返すので、set -eはトリガーされないはずです。
答え3
戻り/エラー コード (関数またはフォーク) をキャッチしようとしている場合は、次のようにします。
function xyz {
return 2
}
xyz && RC=$? || RC=$?
答え4
もう 1 つのアプローチは、かなり簡単だと思います (set
に加えて他のオプションにも適用されます-e
)。
設定を復元するために使用します$-
。
例えば:
oldopt=$-
set +e
# now '-e' is definitely disabled.
# do some stuff...
# Restore things back to how they were
set -$oldopt
ただし-e
、具体的には、他の人が言及したオプション(|| true
または「 内に置くif
」)の方が慣用的かもしれません。