Trap: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 16: Line 16:
=Behavior on Being Invoked from Sub-Shells=
=Behavior on Being Invoked from Sub-Shells=


If code is registered with <code>trap</code> 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.
If code is registered with <code>trap</code> 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:
The following code:

Revision as of 17:47, 5 December 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:

Handling Signals in bash

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 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

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"