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 /src | |
parent | expand: Fix multiple issues with EXP_DISCARD in evalvar (diff) | |
download | dash-06204f0c9f539fcb8cb532166656e80b81bd689a.tar.gz dash-06204f0c9f539fcb8cb532166656e80b81bd689a.zip |
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>
Diffstat (limited to 'src')
-rw-r--r-- | src/eval.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/eval.c b/src/eval.c index 546ee1b..dde9fa2 100644 --- a/src/eval.c +++ b/src/eval.c @@ -307,11 +307,11 @@ setstatus: break; } out: + dotrap(); + if (checkexit & status) goto exexit; - dotrap(); - if (flags & EV_EXIT) { exexit: exraise(EXEXIT); |