我正在寻找在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!"
...
}
答案 0 :(得分:1)
您可能正在寻找trap
,例如
trap "rmdir $mnt" EXIT