コマンドエラーが発生した場合、bashスクリプトの関数を自動的に実行する方法はありますか?

コマンドエラーが発生した場合、bashスクリプトの関数を自動的に実行する方法はありますか?

私は複数のコマンドを実行する必要があるシェルスクリプトを作成していますが、各コマンドは以前のすべてのコマンドによって異なります。コマンドが失敗すると、スクリプト全体が失敗し、終了関数を呼び出します。各コマンドの終了コードを確認できますが、有効にするモードがあるかどうか、またはbashにこの操作を自動的に実行させる方法があるかどうかを知りたいです。

たとえば、次のコマンドを使用します。

cd foo || myfunc
rm a || myfunc
cd bar || myfunc
rm b || myfunc


このコマンドを実行する前にコマンドのいずれかが失敗した場合は、myfuncを呼び出して次のようにきちんと作成できるようにシェルにシグナルを送信する方法はありますか?

cd foo
rm a
cd bar
rm b

ベストアンサー1

バッシュが使えますトラップエラーコマンドがゼロより大きい状態を返す場合は、スクリプトを終了し、終了時に関数を実行します。

それは次のとおりです。

myfunc() {
  echo 'Error raised. Exiting!'
}

trap 'myfunc' ERR

# file does not exist, causing error
ls asd
echo 123

気づくスラムトラップ ERR暗黙的なset -o errexitorset -eと は POSIX ではありません。

失敗したコマンドが、またはキーワードの直後のコマンドリストの一部であるか、予約語の後のテストの一部であるか、リストで実行されたコマンドの一部である、またはコマンドの戻り状態が反転を使用している場合、ERRトラップは実行されません。untilwhileifelif&&||!

おすすめ記事