对于许多例子trap使用trap ... INT TERM EXIT的清理任务。但是是否真的有必要列出所有三个sigspec?
该手册说:
如果SIGNAL_SPEC为EXIT(0),则从外壳退出时将执行ARG。
我认为无论脚本正常完成还是由于收到SIGINT或脚本而结束,该脚本都适用SIGTERM。实验还证实了我的信念:
$ cat ./trap-exit
#!/bin/bash
trap 'echo TRAP' EXIT
sleep 3
$ ./trap-exit & sleep 1; kill -INT %1
[1] 759
TRAP
[1]+ Interrupt ./trap-exit
$ ./trap-exit & sleep 1; kill -TERM %1
[1] 773
TRAP
[1]+ Terminated ./trap-exit
那为什么这么多例子列出了全部INT TERM EXIT呢?还是我错过了某件事,是否有鞋底EXIT会错过的情况?
INT TERM EXIT在收到SIGTERM或的条件下,清理代码会执行两次SIGINT。