summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarren Tucker <dtucker@dtucker.net>2022-01-20 13:26:27 +1100
committerDarren Tucker <dtucker@dtucker.net>2022-01-20 13:43:54 +1100
commit2e5cfed513e84444483baf1d8b31c40072b05103 (patch)
tree1466639dca969456040325ee7c652235a6d02820
parent3fe6800b6027add478e648934cbb29d684e51943 (diff)
Improve compatibility of early exit trap handling.
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.
-rw-r--r--regress/test-exec.sh9
1 files changed, 7 insertions, 2 deletions
diff --git a/regress/test-exec.sh b/regress/test-exec.sh
index 7aeead5c..15bdd084 100644
--- a/regress/test-exec.sh
+++ b/regress/test-exec.sh
@@ -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