]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
Improve compatibility of early exit trap handling.
authorDarren Tucker <dtucker@dtucker.net>
Thu, 20 Jan 2022 02:26:27 +0000 (13:26 +1100)
committerDarren Tucker <dtucker@dtucker.net>
Thu, 20 Jan 2022 02:43:54 +0000 (13:43 +1100)
Dash (as used by the github runners) has some differences in its trap
builtin:
 - it doesn't have -p (which is fine, that's not in posix).
 - it doesn't work in a subshell (which turns out to be in compliance
   with posix, which means bash isn't).
 - it doesn't work in a pipeline, ie "trap|cat" produces no output.

regress/test-exec.sh

index 7aeead5c999bf42bec3c66b8bcada2c5b5cda7d5..15bdd084790ceb3f7b9953b8cb9998b533eb7ea1 100644 (file)
@@ -724,10 +724,15 @@ if [ "x$USE_VALGRIND" != "x" ]; then
        # their logs, but since the EXIT traps are not invoked until
        # test-exec.sh exits, waiting here will deadlock.
        # This is not very portable but then neither is valgrind itself.
-       exithandler=$(trap -p | awk -F "'" '/EXIT$/{print $2}')
+       # As a bonus, dash (as used on the runners) has a "trap" that doesn't
+       # work in a pipeline (hence the temp file) or a subshell.
+       exithandler=""
+       trap >/tmp/trap.$$ && exithandler=$(cat /tmp/trap.$$ | \
+           awk -F "'" '/EXIT$/{print $2}')
+       rm -f /tmp/trap.$$
        if [ "x${exithandler}" != "x" ]; then
                verbose invoking EXIT trap handler early: ${exithandler}
-               ${exithandler}
+               eval "${exithandler}"
                trap '' EXIT
        fi