set -e
exit
"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