6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Linux】シェルスクリプトの終了/中断時に後処理が出来るtrap

Posted at

終了/中断時に後処理が出来る 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コマンドを使うにあたって

シグナルの理解は必須です。
以下のサイトを参照の上で利用する事を推奨します。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?