参考
https://shellscript.sunone.me/signal_and_trap.html
https://genzouw.com/entry/2021/03/02/080000/2381/
概要
trapコマンドでfinallyのような後処理を実行する。
trap コマンドは送出されたシグナルを捕捉し、あらかじめ指定されていた処理を実行するコマンドである
終了コードはtrapで補足する前の終了コードになる。
trap finally EXIT finally() { echo finally echo ここに後処理を書く }
サンプル
run_finally.sh
#!/bin/sh trap finally EXIT # trap finally EXIT INT RUN_COMMAND=${1} FINALLY_COMMAND=${2} finally() { # echo finally # echo "${FINALLY_COMMAND}" eval ${FINALLY_COMMAND} } # echo run # echo "${RUN_COMMAND}" eval ${RUN_COMMAND}
呼び出し
sh run_finally.sh "echo test" "echo 後処理"
「;(セミコロン)」との違い
コマンドの処理結果(リターンコード)に関わらずコマンドを実行するだけなら
echo test; echo 後処理
のようにセミコロンで繋げればよいが、最後に実行したコマンドのリターンコードしか
受け取れない
例
echo test; hoge; echo finally echo $? 0
hogeコマンドがないのでエラーになりつつ、finallyが表示されるがリターンコードは0になる
上記shellの場合は、第一引数のリターンコードを取得できる
sh run_finally.sh "echo test; hoge" "echo finally" echo $? 127
また、finallyでエラーになってもリターンコードは書き換えられない
sh run_finally.sh "echo test" "echo finally;hoge" echo $? 0
[カテゴリ: プログラミング言語 > Shell]
[通知用URL]
Tweet
最終更新時間:2021年12月30日 11時38分24秒