_each_コマンドを使用して、エラーに対して特定のタスクを実行するようにbashスクリプトにどのように指示できますか?

_each_コマンドを使用して、エラーに対して特定のタスクを実行するようにbashスクリプトにどのように指示できますか?

set -eexit"uncatch"で実行するのと同様に、$? != 0このイベントはcallなどの他のコマンドの実行をトリガーしたいと思いますlogger。これはどのように達成できますか?

ベストアンサー1

暗示したようにこの問題trap、答えは信号に1つを設定することですERR。これは基本的set -eに同等ですtrap 'exit' ERR。たとえば、エラーを記録して実行を続行するには、次のようにします。

trap 'logger -t myscriptname "Command $BASH_COMMAND exited with code $?"' ERR

Bashでは、この変数には$BASH_COMMAND問題のコマンドが含まれています。$?最後に実行されたコマンドの終了コードを含みます。たとえば、複数の操作を実行したい場合は、終了コードが1つしか含まれていないため、logger ...; echo $?最初に変数に保存する必要があります。$?logger$BASH_COMMAND

trap 'EXITCODE=$?; logger -t "Command $BASH_COMMAND exited with code $EXITCODE"; echo "$BASH_COMMAND at line $LINENO exited with code $EXITCODE"' ERR

もちろん、このように長い行の代わりに$?関数を宣言して渡す方が良いでしょう!$BASH_COMMAND

おすすめ記事