Trap: Difference between revisions
Jump to navigation
Jump to search
Line 31: | Line 31: | ||
Note that sending the output to stderr in the trap code is relevant, if we send it to stdout, the output is lost, even if the code executes. | Note that sending the output to stderr in the trap code is relevant, if we send it to stdout, the output is lost, even if the code executes. | ||
=TODO= | |||
Investigate usefulness in case of a reactive wait container: | |||
CMD exec /bin/bash -c "trap : TERM INT; sleep infinity & wait" |
Revision as of 20:47, 30 September 2019
Internal
Overview
Trap is a facility to instruct bash to catch signals and execute code depending on the signal. A common usage in shell scripts is to prevent those scripts to exit untimely when users type keyboard abort sequences, but run cleanup code instead.
Example:
trap 'rm -f ./lock' EXIT
Also see:
Behavior on Being Invoked from Sub-Shells
If code is registered with trap
in a sub-shell, or in a function that is invoked in a sub-shell, to react to EXIT, then the registered code will be executed when the sub-shell, and not the top-level invoking shell, exists.
The following code:
$(trap 'echo "a" 1>&2' EXIT)
echo "b"
will display:
a
b
Note that sending the output to stderr in the trap code is relevant, if we send it to stdout, the output is lost, even if the code executes.
TODO
Investigate usefulness in case of a reactive wait container:
CMD exec /bin/bash -c "trap : TERM INT; sleep infinity & wait"