首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用返回陷阱和立即重置处理程序进行bash清理

使用返回陷阱和立即重置处理程序进行bash清理
EN

Stack Overflow用户
提问于 2018-10-17 02:19:33
回答 1查看 407关注 0票数 1

有没有办法在陷阱处理程序中禁用陷阱?

我想通过使用返回陷阱来简化一些代码。my_func将返回my_command的值。当my_func返回时,tmpfile将被清除。这个技巧可以让我避免分配一个临时变量来保存$?在我清理的时候从my_func下载。

但是,我无法在处理程序中重置陷阱处理程序,现在每次函数返回后都会调用清理程序。

最终,我真正想做的是在调用my_command之后进行清理,但仍然将其作为最后一个命令,因此返回值是隐式的。任何建议的替代方案都将不胜感激。

代码语言:javascript
复制
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
}
EN

回答 1

Stack Overflow用户

发布于 2018-10-17 03:45:27

我总是使用这个模式:

代码语言:javascript
复制
trap 'rm -rf "$workspace"' EXIT
workspace="$(mktemp --directory)" # Or -d
# Use $workspace

它有几个很好的特性:

由于陷阱是在创建目录之前设置的,因此没有竞争目录意味着我不需要在脚本中进行更多的调用,因为我可以将所有内容都放在一个目录中,而不是放在一个文件中,这样可以提供更好的安全基准,因为通常每个人都可以直接看到directory.

  1. Creating中的内容,但是一个新目录将归您所有,并将创建“mktemp,condition.
  2. Creating
  3. mktemp”(从/tmp创建

如果你想要更早的清理,我建议你直接明确的做。您的解决方案有两个不必要的间接级别:陷阱和要运行的参数的传递。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52841709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档