RAII或者最后'在bash中进行仿真

时间:2014-04-28 09:09:45

标签: bash raii finally

我正在寻找在bash中使用功能来模仿RAII或“最终”的最佳做法。

使用陷阱机制是可以接受的,但是它必须全部发生在子shell中。我正在寻找能够将脚本分解为自己清理的函数的方法。

举一个例子,假设我想要创建一个目录并挂载一个文件系统,可以在各种错误情况发生时进行解决。

my_func() {
    local mnt=$(mktemp -d)
    $MAGIC 'rmdir $mnt' # RIAA-style cleanup
    mount /dev/disk $mnt
    $MAGIC 'umount $mnt' # another RIAA-style cleanup
    if [ $foo blash ]; then
       echo "Nah, $foo is blash, please blargh!"
       return 1
    fi
    ...
    if [ ! -f $mnt/file ]; then
       echo "File does not exist, blargh!"
       return 1
    fi
    ...
    if ! grep -q 'blargh!!!' $mnt/file; then
       echo "Blargh!!! not found, blargh!"
       return 1
    fi
    ...
    echo "Success, nice!"
    ...
}

1 个答案:

答案 0 :(得分:1)

您可能正在寻找trap,例如

trap "rmdir $mnt" EXIT