Bash Accumula un elenco di operazioni di trap da eseguire all'uscita.


Esempio

Ti sei mai dimenticato di aggiungere una trap per pulire un file temporaneo o eseguire altri lavori all'uscita?

Hai mai impostato una trappola che ne ha annullato un'altra?

Questo codice semplifica l'aggiunta di elementi da eseguire all'uscita di un elemento alla volta, piuttosto che avere un'istruzione trap grandi dimensioni da qualche parte nel codice, che potrebbe essere facile da dimenticare.

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