終了/中断時に後処理が出来る trap
シェルで良くありがちな処理として、ファイルを作ってシェルの実行結果をテキストファイルなどに書いたり、
そのファイルを最後に削除したりする物が多い。
しかし、そういった場合に作成したファイルの後始末が結構面倒だったりします。
Ctrl+C
とかで処理の途中で終了された時に、
作業途中のごみファイルが残ったりして、一時退避していたファイルがそのまま取り残されたりすると本当に面倒です。
そこで便利なのが trap コマンドです。
trapのメリット
事前にtrap処理を書いておく事で、処理が途中で中断されてしまったりした際にも、
必ず中に書いてあるコマンドを後処理として実行させることができるようになります。
しかも素晴らしいのが trap コマンドは終了時のシグナルを捕捉して、
処理を実行してくれるので、
- エラーの時はこんな処理を走らせる
- 正常終了の時はこんな処理を走らせる
と処理を書き分けたり出来るので、本当に便利です。
たとえスクリプトが Ctrl+C
とかで途中終了してしまった場合でも、きちんと後始末できるようになります。
以下の様にして trap "後処理" シグナル番号
と指定するだけでOKです。
trap "rm /tmp/hoge-tmp" 0
同じシグナルに対して2つ以上のコマンドを実行したい
以下の様にすればOKです。
(勿論、Terminate処理の関数を作って、それを実行させるのもOKです)
trap "
mv /tmp/swap-file original-file
rm /tmp/target-file
" 0
trapコマンドを使うにあたって
シグナルの理解は必須です。
以下のサイトを参照の上で利用する事を推奨します。