一時ファイルなどの一時フォルダを使用できますか?
TMP=$(mktemp ... )
exec 3<>$TMP
rm $TMP
cat <&3
シェルが終了した後に自動的に破壊されるのは何ですか?
ベストアンサー1
一時ファイルの場合、質問の例では一時ファイルを作成し、ディレクトリのリンクを解除し(「消える」設定)、スクリプトがファイル記述子を閉じると(おそらく終了時に)、システムはファイルが占有しているスペースを回復します。これは、Cなどの言語で一時ファイルを処理する一般的な方法です。
私が知っている限り、同じ方法でディレクトリを開くことは不可能です。少なくともディレクトリを使用可能にする方法では不可能です。
スクリプトの終了時に一時ファイルとディレクトリを削除する一般的な方法は、クリーンアップEXIT
トラップをインストールすることです。以下のコード例では、ファイル記述子を完全に処理しません。
tmpdir=$(mktemp -d)
tmpfile=$(mktemp)
trap 'rm -f "$tmpfile"; rm -rf "$tmpdir"' EXIT
# The rest of the script goes here.
あるいは、クリーンアップ関数を呼び出すこともできます。
cleanup () {
rm -f "$tmpfile"
rm -rf "$tmpdir"
}
tmpdir=$(mktemp -d)
tmpfile=$(mktemp)
trap cleanup EXIT
# The rest of the script goes here.
EXIT
信号を受信するとトラップは行われません(KILL
キャッチできません)。これは、現在のクリーンアップが行われていないことを意味します。ただしINT
、またはシグナルが原因で終了した場合TERM
(bash
または実行している場合は、他のシェルはコマンドラインの後にこれらのシグナルを追加する必要がありますksh
)、またはスクリプトまたは実行呼び出しの終わりに達して終了します。EXIT
trap
exit