シェルスクリプト内で一時ファイルを作成して終了時に削除する
trapコマンドを使うとさまざまなタイミングでファイルを操作できると知ったのでメモする。
例
以下の内容をファイルにして実行すると動作が確認できる。
#!/usr/bin/env sh output=$(mktemp mytempfile_XXXXXX 2>/dev/null || exit 1) trap "rm -f $output" 0 1 2 3 echo 'hoge' > $output cat $output echo '5秒間待機します...' sleep 5
実行すると 5秒間待機します... と表示されストップする。ここで以下3つの操作を行ってもファイルが削除される。
- 5秒間待って正常に終わる(シグナル0)
- ターミナルのウインドウを閉じて終了させる(シグナル1, SIGHUP)
- Ctrl + cで終了させる(シグナル2, SIGINT)
- Ctrl + \で終了させる(シグナル3, SIGQUIT)
それぞれのシグナルの意味はWikipediaに載っている。
trapコマンドの使い方は以下のページが良さそう。
-> http://shellscript.sunone.me/signal_and_trap.html
おまけ
これだけだと内容が少ないのでzshの話を絡める。
ある日突然Ctrl + cの動作が味気ないと思うかもしれない。そんな時は .zshrc
に以下の関数を追加するといい。
TRAPINT() { echo -n '(´;ω;`)ウッ…' return $(( 128 + $1 )) }
Ctrl + cを押した時に癒される。
詳細はzshのマニュアルにわかりやすく書いてある。
-> http://zsh.sourceforge.net/Doc/Release/Functions.html#index-trapping-signals
参照
LinuxCommand.org: Dialog http://linuxcommand.org/lc3_adv_dialog.php