8

我有一个简单的脚本

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

所以我不确定它应该如何运作以及它是否被指定。

4

1 回答 1

5

EXIT陷阱在每个外壳中的工作方式都不相同。几个例子:

  • 在 dash 和 zsh 中,它仅由脚本内的常规退出触发。
  • 在 zsh 中,如果你捕获了一个通常会退出执行的信号,你需要通过显式调用来恢复默认行为exit

我建议您实际捕获信号然后退出,它应该可以在大多数 shell 中移植:

$ 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
于 2014-12-17T07:46:56.310 回答