bashスクリプトから子プロセスとして(バックティックを使用して)呼び出されるbash関数があります。この関数 (子プロセスで実行されている) が親のトラップ ハンドラを変更する方法はありますか? この関数は、親が終了したときにクリーンアップしたい一時ファイルを作成します。例として
function get_roe_dir() {
tmp_dir=`mktemp -d`
if [ $? -eq 0 ]; then
# some processing on $tmp_dir
echo "$tmp_dir"
# Add "rm -rf $tmp_dir" to parent's EXIT trap
fi
}
次に、呼び出しスクリプトには次のようなものがあります。
roe_dir=`get_roe_dir`
# Some processing using files in $roe_dir.
$roe_dir
このスクリプトが終了したら、(EXIT トラップを使用して) 削除したいと思います。これを達成するためのクリーンな方法のアイデアはありますか?
get_roe_dir()
出力をキャプチャするためにサブシェルで実行されるため、関数に EXIT トラップを追加できません。したがって、get_roe_dir()
が戻るとすぐにサブシェルが終了し、EXIT トラップが呼び出され、作成された一時ディレクトリが削除されます。