1. ホーム
  2. bash

[解決済み] 予期しないbashの終了時に作成された一時ファイルを削除する

2022-11-26 17:49:38

質問

bashスクリプトで一時ファイルを作成しています。処理終了時に削除しているのですが、スクリプトがかなり長く実行されているため、実行中にスクリプトを終了したり、単に CTRL-C を実行しても、一時ファイルが削除されません。

これらのイベントをキャッチして、実行が終了する前にファイルをクリーンアップする方法はありますか?

また、これらの一時ファイルの名前と場所について、何らかのベスト プラクティスがありますか?

私は現在、使用している間によくわかりません。

TMP1=`mktemp -p /tmp`
TMP2=`mktemp -p /tmp`
...

TMP1=/tmp/`basename $0`1.$$
TMP2=/tmp/`basename $0`2.$$
...

それとも、もっと良い解決策があるのでしょうか?

どのように解決するのですか?

"を設定するとよいでしょう。 トラップ を設定して、終了時または control-c で実行し、クリーンアップすることができます。

trap '{ rm -f -- "$LOCKFILE"; }' EXIT

あるいは、私の好きな Unix イズムのひとつに、ファイルを開いてから、開いている間にそれを削除することがあります。 ファイルはファイルシステム上に残り、読み書きができますが、プログラムが終了するとすぐにファイルは消えます。 しかし、bashでそれをどのように行うかについては、よくわかりません。

ところで、あなた自身の解決策を使う代わりに mktemp を支持する一つの議論をします: ユーザーがあなたのプログラムが巨大な一時ファイルを作成することを予期しているなら、彼は TMPDIR を /var/tmp のような大きな場所に設定したいと思うかもしれません。mktemp はそれを認識しますが、手動の解決策(2番目のオプション)はそれを認識しません。 私は頻繁に TMPDIR=/var/tmp gvim -d foo bar をよく使いますが、例えば