| #!/bin/bash |
| |
| # Provides an "atexit" mechanism for scripts. |
| |
| # Array of commands to eval. |
| declare -a __atexit_cmds |
| |
| # Helper for eval'ing commands. |
| __atexit() { |
| for cmd in "${__atexit_cmds[@]}"; do |
| eval ${cmd} |
| done |
| } |
| |
| # Usage: atexit command arg1 arg2 arg3 |
| atexit() { |
| # Determine the current number of commands. |
| local length=${#__atexit_cmds[*]} |
| |
| # Add this command to the end. |
| __atexit_cmds[${length}]="${*}" |
| |
| # Set the trap handler if this was the first command added. |
| if [[ ${length} -eq 0 ]]; then |
| trap __atexit EXIT |
| fi |
| } |