本を読む

読書やコンピュータなどに関するメモ

シェルスクリプトでテンポラリファイルの後始末

 プログラム中でテンポラリファイルを作ったときには、最後に削除します。シェルスクリプトだとこんな感じです。

tmpfile=$(mktemp /tmp/tmp.XXXXXXXXXX)
# ここに処理いろいろ
rm "$tmpfile"

 が、この方法には、「正常終了以外ではテンポラリファイルが削除されない」「シェルスクリプトの終了ステータスが、処理本体のものでなく、rm -fのものになる」という2つの弱点があります。

 で、シグナル処理とかいろいろなパターンがあるんですが、いまどきだとtrapコマンドで疑似シグナルのEXIT(シグナル0)に後始末処理を入れるのが、正常系でも異常系でも処理できて簡単かと思います。

trap 'rm -f "$tmpfile"' EXIT
tmpfile=$(mktemp /tmp/tmp.XXXXXXXXXX)
# ここに処理いろいろ

 正常終了での終了ステータスは、rmのものではなく、“ここに処理いろいろ”の最後のコマンドのものになります。

 bash、dash、ash(BusyBoxを含む)、zshで動作確認したので、Linux・FreeBSD・Macあたりであればこの方法が使えるかと思います。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/1032-0f61e04f

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad