これは、現在のディレクトリに一時ディレクトリを設定し、終了時にそれを削除するトラップを設定する簡単なスクリプトです。
#filename: script
set -x
trap 'rm -rf "$d"' exit
d=`TMPDIR=$PWD mktemp -d`
"$@"
私が行った場合 ksh script sleep 100
またはbash script sleep 100
およびC-C
、トラップが実行され、ディレクトリが削除されます。 dash
では機能しません。どうして?これはバグですか、それとも意図した動作ですか?
警告:exit
の動作は保証されていません。代わりに、EXIT
を使用する必要があります。
POSIX標準では、シグナルの場合にEXIT
トラップも実行する必要があるかどうかが定義されておらず、Bourne ShellがEXIT
トラップを呼び出さないという事実が与えられている場合、nspecified動作を入力していることは明らかです。