我有一个简单的脚本
trap 'echo exit' EXIT
while true; do sleep 1; done
它在不同的外壳中表现不同:
$ bash tst.sh
^Cexit
$ dash tst.sh
^C
$ zsh tst.sh
^C
$ sh tst.sh
^Cexit
所以我不确定它应该如何操作以及是否指定了它。
EXIT
陷阱在每个shell中的工作方式并不相同。举几个例子:
- 在 dash 和 zsh 中,它仅由脚本中的常规退出触发。
- 在 zsh 中,如果你捕获了一个通常会退出执行的信号,你需要通过显式调用
exit
来恢复默认行为。
我建议你实际捕捉信号然后退出,它应该是便携式的在大多数外壳中:
$ cat trap
trap 'echo exit; exit' INT TERM # and other signals
while true; do sleep 1; done
$ bash trap
^Cexit
$ dash trap
^Cexit
$ zsh trap
^Cexit
$ ksh trap
^Cexit
$ mksh trap
^Cexit
$ busybox sh trap
^Cexit