いくつかの一時ファイルを生成するかなり長いbashプロセスがあり、そのいくつかは名前とほぼランダムな名前を生成しました。
プロセスが失敗した後に手動で削除するのを防ぎたいと思います。 PIDが終了すると、「自動削除」される一時ディレクトリ(PIDに関連付けられたディレクトリなど)がありますか?そうでなければ大きな助けになります。
1つのアプローチは、このディレクトリをグローバル一時ディレクトリとして作成して使用することです。ただし、このディレクトリはプロセスが異常終了した後もそのまま残りますmkdir /tmp/$$
。/tmp
私は使用したかったのですtrap "rm -rf /tmp/$$" EXIT
が、それも機能しておらず、トラップを使用しました... RETURNは広すぎます。
私はすべてのシェルや他のユーザープログラムで利用可能な一般的なものを探しています。
一時ディレクトリが存在しますか、はい、いいえですか?
ベストアンサー1
私がする方法は次のとおりです。
tempdir=$(mktemp -d)
function cleanup {
rm -rf "$tempdir"
}
trap cleanup EXIT
trap cleanup SIGINT
私はうまく動作するいくつかのユースケースを試しました。
tempdir=$(mktemp -d)
function cleanup {
rm -rf "$tempdir"
}
trap cleanup EXIT
trap cleanup SIGINT
echo "$tempdir"
sleep infinity
検索して()すると、PID
CTRL + C(SIGINT)を使用するとクリーンアップされます。kill
SIGTERM
$tempdir
$tempdir
別の例は次のとおりです。
tempdir=$(mktemp -d)
function cleanup {
rm -rf "$tempdir"
}
trap cleanup EXIT
trap cleanup SIGINT
echo "$tempdir"
set -e
/bin/false
これは「プロセス失敗」をシミュレートします。false
返されると、set -e
このスクリプトは終了します。トラップは最後に呼び出され続け、ディレクトリは削除され続けます。
キャプチャする必要がある他の状況がある場合は、より多くの信号を追加できます。これがうまくいかない他のユースケースはありますか?
キャプチャできない唯一のことですSIGKILL
。