Trap
External
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
For a list of signals that can be handled, see:
"EXIT" in the example above is not a Linux signal. Bash provides this psuedo-signal, which is executed when the script exits; this can be used to make sure that your script executes some cleanup on exit.
Also see:
Behavior on Being Invoked from Sub-Shells
If code is registered with trap
to react to EXIT in a sub-shell, or in a function that is invoked in a sub-shell, 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 the output should be sent to stderr in the trap code - if the output is sent to stdout, the output is lost, even if the code executes.
TODO
Reactive Wait Container
Investigate usefulness in case of a reactive wait container. Also see Docker Concepts - Container Exit.
CMD exec /bin/bash -c "trap : TERM INT; sleep infinity & wait"