For some shells an EXIT
handler is invoked on SIGINT
/SIGTERM
(bash
), for some it isn't (dash
, busybox
).
a.sh
:
trap 'echo cleanup' EXIT
sleep 3
bash
:
$ bash --version
GNU bash, version 5.1.8(1)-release (x86_64-pc-linux-gnu)
...
$ bash a.sh
cleanup
$ bash a.sh
^Ccleanup
$ bash a.sh & sleep 1 && kill \%1
[1] 170100
cleanup
[1]+ Terminated ./e.sh
busybox
:
$ docker run --rm -itv $PWD:/app -w /app alpine:3.14 sh
/app # sh a.sh
cleanup
/app # sh a.sh
^C
/app # sh a.sh & sleep 1 && kill %1
[1]+ Terminated sh a.sh
dash
:
$ dpkg -l | grep dash | awk '{print $3}'
0.5.7-4+b1
$ sh a.sh
cleanup
$ sh a.sh
^C
$ sh a.sh & sleep 1 && kill %1
[1] 5770
[1]+ Terminated sh a.sh