mirror of
git://anongit.mindrot.org/openssh.git
synced 2024-11-27 05:46:36 +08:00
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.
This commit is contained in:
parent
3fe6800b60
commit
2e5cfed513
@ -724,10 +724,15 @@ if [ "x$USE_VALGRIND" != "x" ]; then
|
|||||||
# their logs, but since the EXIT traps are not invoked until
|
# their logs, but since the EXIT traps are not invoked until
|
||||||
# test-exec.sh exits, waiting here will deadlock.
|
# test-exec.sh exits, waiting here will deadlock.
|
||||||
# This is not very portable but then neither is valgrind itself.
|
# 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
|
if [ "x${exithandler}" != "x" ]; then
|
||||||
verbose invoking EXIT trap handler early: ${exithandler}
|
verbose invoking EXIT trap handler early: ${exithandler}
|
||||||
${exithandler}
|
eval "${exithandler}"
|
||||||
trap '' EXIT
|
trap '' EXIT
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user