予期しない bash 終了時に作成された一時ファイルを削除する 質問する

予期しない bash 終了時に作成された一時ファイルを削除する 質問する

bash スクリプトから一時ファイルを作成しています。処理の最後に一時ファイルを削除しますが、スクリプトの実行時間がかなり長いため、実行中にスクリプトを強制終了するか、単に CTRL-C を押しても、一時ファイルは削除されません。
実行が終了する前にこれらのイベントをキャッチしてファイルをクリーンアップする方法はありますか?

また、これらの一時ファイルの名前と場所に関するベストプラクティスはありますか?
現時点では、次のどちらを使用するかはわかりません。

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

そして

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

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

ベストアンサー1

通常、すべての一時ファイルを配置するディレクトリを作成し、その直後に、スクリプトの終了時にこのディレクトリをクリーンアップするための EXIT ハンドラを作成します。

MYTMPDIR="$(mktemp -d)"
trap 'rm -rf -- "$MYTMPDIR"' EXIT

すべての一時ファイルを の下に置くと$MYTMPDIR、ほとんどの場合、スクリプトの終了時にそれらはすべて削除されます。ただし、SIGKILL (kill -9) を使用してプロセスを強制終了すると、プロセスは直ちに強制終了されるため、その場合は EXIT ハンドラは実行されません。

おすすめ記事