Bash でスクリプトの終了時に締め処理を実行させたい。キャッシュや一時ファイルの削除など。
締め処理を関数に定義して exit
直前に実行させればいいのですが、なぜか毎回入れ忘れる沼にハマったのでポカヨケが欲しかったのです。
つまり OnExit
で CleanUp
的なことをさせたいのです。Go 言語でいう defer
や、PHP でいう register_shutdown_function
のようなもの。たまにしか使わないので、すぐ忘れてしまう。
しかし「bash シェル 遅延 終了時 実行」でググっても sleep
を使った記事ばかり。意外なことに、なかなかドンピシャに記事がヒットしないというトラップにかったので、自分のググラビリティとして。
TL;DR (今北産業)
-
trap
を使う - 発動シグナルに
EXIT
を使う -
Ctrl+C
やSIGKILL
などのシグナルにも発動させたい場合は以下の記事を参照。-
trap
コマンドのまとめ | shellのtrapについて覚え書き @ Qiita
-
#!/bin/bash
cleanup() {
echo "cleaned up!"
}
trap cleanup EXIT
echo "forced error!"
exit 1
# Output:
# forced error!
# cleaned up!
- オンラインで動作をみる @ paiza.IO
参考文献
- How "Exit Traps" Can Make Your Bash Scripts Way More Robust And Reliable @ aaron maxwell
- shellのtrapについて覚え書き @ Qiita