0

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

4

1 回答 1

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
于 2013-07-25T21:03:15.270 回答