我有一个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陷阱,因为它在子shell中执行以捕获输出。因此,只要get_roe_dir()
返回,子shell退出并调用EXIT陷阱,删除它创建的临时目录。
答案 0 :(得分:0)
也许不正确理解,但接下来的工作:
set_trap() {
trap "rm -rf $roe_dir" 0
}
get_roe_dir() {
dir=$(mktemp -d /tmp/roe.XXXXXX) && echo $dir && return 0
return 1
}
roe_dir=$(get_roe_dir) && set_trap
ls -la "$roe_dir"
echo going to exit - check ls -l $roe_dir should not exists