多くの場合、一時ファイルの書き込み/読み取りが必要な実行可能ファイルを実行します。通常、一時ディレクトリを作成し、そこで実行可能ファイルを実行し、スクリプトが完了したらディレクトリを削除します。
実行ファイルが殺されてもディレクトリを削除したいのですが。私はそれを包み込もうとしました:
#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
/usr/local/bin/my_binary
ときにmy_binary
スクリプトがそれを保持する最後のプロセスであるようダイは、最後のプロセスのカーネルでは、ディレクトリを削除しますinode
。削除したディレクトリにファイルを作成できません。
#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
touch file.txt
出力 touch: file.txt: No such file or directory
私が思いつくことができる最高のものは、プロセスが死んだときに一時ディレクトリを削除し、最も一般的なシグナルをキャッチして、cronでクリーンアッププロセスを実行することです。
#!/bin/bash
dir=$(mktemp -d /tmp/d.XXXXXX) && cd "$dir" || exit 99
trap 'rm -rf "$dir"' EXIT
/usr/local/bin/my_binary
現在のバイナリが死んだときに自動的に削除される本当に一時的なディレクトリを作成する簡単な方法はありますか?
cleanup
mktempが完了する前に実行される小さなウィンドウがあることに注意してください。unset dir
トラップを設定する前に、必要な場合があります。