在子bash过程中更改父级的陷阱处理程序

时间:2013-07-25 19:57:46

标签: bash signals child-process bash-trap

我有一个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陷阱,删除它创建的临时目录。

1 个答案:

答案 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