有没有办法在陷阱处理程序中禁用陷阱?
我想通过使用返回陷阱来简化一些代码。my_func将返回my_command的值。当my_func返回时,tmpfile将被清除。这个技巧可以让我避免分配一个临时变量来保存$?在我清理的时候从my_func下载。
但是,我无法在处理程序中重置陷阱处理程序,现在每次函数返回后都会调用清理程序。
最终,我真正想做的是在调用my_command之后进行清理,但仍然将其作为最后一个命令,因此返回值是隐式的。任何建议的替代方案都将不胜感激。
cleanup() { # generic cleanup w/ reset
"$@"
trap - RETURN
}
my_func() {
local -r tmpfile="/tmp/tmpfile"
trap "cleanup rm ${tmpfile}" RETURN
my_command -f ${tmpfile}
}
caller() {
if my_func ; then
do_success_ops
fi
}
发布于 2018-10-17 03:45:27
我总是使用这个模式:
trap 'rm -rf "$workspace"' EXIT
workspace="$(mktemp --directory)" # Or -d
# Use $workspace
它有几个很好的特性:
由于陷阱是在创建目录之前设置的,因此没有竞争目录意味着我不需要在脚本中进行更多的调用,因为我可以将所有内容都放在一个目录中,而不是放在一个文件中,这样可以提供更好的安全基准,因为通常每个人都可以直接看到directory.
mktemp
,condition.mktemp
”(从/tmp
创建如果你想要更早的清理,我建议你直接明确的做。您的解决方案有两个不必要的间接级别:陷阱和要运行的参数的传递。
https://stackoverflow.com/questions/52841709
复制相似问题