【发布时间】:2013-07-25 19:57:46
【问题描述】:
我有一个 bash 函数,它被 bash 脚本作为子进程(虽然是反引号)调用。有没有办法让这个函数(在子进程中运行)修改 parent 的 陷阱处理程序?此函数创建一个临时文件,我希望在父级退出时对其进行清理。举个例子
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 陷阱)。有什么干净的方法可以实现这一目标吗?
我无法将 EXIT 陷阱添加到 get_roe_dir() 函数,因为它在子 shell 中执行以捕获输出。因此,一旦get_roe_dir() 返回,子shell 就会退出并调用EXIT 陷阱,删除它创建的临时目录。
【问题讨论】:
-
不,无法修改父环境中的任何内容。
-
不太明白你想要什么。为什么没有在
get_roe_dir中设置陷阱处理程序?发布更精确的问题(两个脚本的片段 - 父/子)。
标签: bash signals child-process bash-trap