diff options
author | Antonio Ospite <ao2@ao2.it> | 2018-10-16 14:09:52 +0200 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2018-12-14 13:48:02 +0800 |
commit | 06204f0c9f539fcb8cb532166656e80b81bd689a (patch) | |
tree | f911d73f75ee0d033ecb088ad914a10f08fe499e | |
parent | a29e9a1738a4e7040211842f3f3d90e172fa58ce (diff) | |
download | dash-06204f0c9f539fcb8cb532166656e80b81bd689a.tar.gz |
eval: make traps work when "set -e" is enabled
When "set -e" is enabled traps are not always executed, in particular
the EXIT trap is not executed when the shell exits on an unhandled
error.
Consider the following test script:
#!/bin/dash
set -e
trap 'ret=$?; echo "EXIT: $ret"' EXIT
trap 'exit 2' HUP INT QUIT PIPE TERM
read variable
By pressing Ctrl-C one would expect the EXIT trap to be called, as it is
the case with other shells (bash, zsh), but dash does not do it.
By calling dotrap() before jumping to the exit path when checkexit is
not zero, dash behaves like other shells.
Signed-off-by: Antonio Ospite <ao2@ao2.it>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r-- | src/eval.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -307,11 +307,11 @@ setstatus: break; } out: + dotrap(); + if (checkexit & status) goto exexit; - dotrap(); - if (flags & EV_EXIT) { exexit: exraise(EXEXIT); |