Bash Acumula una lista de trabajo de trampa para ejecutar en la salida.


Ejemplo

¿Alguna vez ha olvidado agregar una trap para limpiar un archivo temporal o hacer otro trabajo al salir?

¿Alguna vez has puesto una trampa que canceló otra?

Este código hace que sea fácil agregar las cosas que deben hacerse al salir de un elemento a la vez, en lugar de tener una declaración de trap grande en algún lugar de su código, que puede ser fácil de olvidar.

# on_exit and add_on_exit
# Usage:
#   add_on_exit rm -f /tmp/foo
#   add_on_exit echo "I am exiting"
#   tempfile=$(mktemp)
#   add_on_exit rm -f "$tempfile"
# Based on http://www.linuxjournal.com/content/use-bash-trap-statement-cleanup-temporary-files
function on_exit()
{
    for i in "${on_exit_items[@]}"
    do
        eval $i
    done
}
function add_on_exit()
{
    local n=${#on_exit_items[*]}
    on_exit_items[$n]="$*"
    if [[ $n -eq 0 ]]; then
        trap on_exit EXIT
    fi
}