微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash – 是否需要指定EXIT以外的陷阱?

我看到很多shell脚本:
trap cmd 0 1 2 3 13 15 # EXIT HUP INT QUIT PIPE TERM

在目前我可以访问的每个shell中,0以外的所有陷阱都是冗余的,如果只是指定了陷阱,则在接收到信号时将执行cmd:

trap cmd 0

后一规格是否足够,或者做一些贝壳需要指定其他信号?

为了确保EXIT信号处理程序不会执行两次(这几乎总是不是你想要的),它应该总是设置为在EXIT信号处理程序本身的定义内被忽略或重置。

对于在程序中为它们定义了多个信号处理程序的信号也是如此。

# reset
trap 'excode=$?; cmd; trap - EXIT; echo $excode' EXIT HUP INT QUIT PIPE TERM

# ignore
trap 'excode=$?; trap "" EXIT; cmd; echo $excode' EXIT HUP INT QUIT PIPE TERM

原文地址:https://www.jb51.cc/bash/388164.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐