トップ 差分 一覧 ソース 置換 検索 ヘルプ PDF RSS ログイン

shellscriptで後処理(finally)する

参考

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]



  • Hatenaブックマークに追加
  • livedoorクリップに追加
  • del.icio.usに追加
  • FC2ブックマークに追加

最終更新時間:2021年12月30日 11時38分24秒