| #!/bin/bash | |
| set -e | |
| set -o xtrace | |
| if [ -z "${on_exit_hooks:-}" ]; then | |
| on_exit_hooks=() | |
| fi | |
| on_exit() | |
| { | |
| for i in $(seq $((${#on_exit_hooks[*]} - 1)) -1 0); do | |
| eval "${on_exit_hooks[$i]}" | |
| done | |
| } | |
| add_on_exit() | |
| { | |
| local n=${#on_exit_hooks[*]} | |
| on_exit_hooks[$n]="$*" | |
| if [[ $n -eq 0 ]]; then | |
| trap on_exit EXIT | |
| fi | |
| } |