我看到很多shell脚本:
trap cmd 0 1 2 3 13 15 # EXIT HUP INT QUIT PIPE TERM
在目前我可以访问的每个shell中,0以外的所有陷阱都是冗余的,如果只是指定了陷阱,则在接收到信号时将执行cmd:
trap cmd 0
后一规格是否足够,或者做一些贝壳需要指定其他信号?
为了确保EXIT信号处理程序不会执行两次(这几乎总是不是你想要的),它应该总是设置为在EXIT信号处理程序本身的定义内被忽略或重置。
原文链接:https://www.f2er.com/bash/388164.html对于在程序中为它们定义了多个信号处理程序的信号也是如此。
# 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