参考
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秒