累計在退出時執行的陷阱工作列表

你有沒有忘記新增 trap 來清理臨時檔案或在退出時做其他工作?

你有沒有設定一個取消另一個的陷阱?

這段程式碼可以很容易地在退出一個專案時新增要完成的事情,而不是在程式碼中的某個地方新增一個大的 trap 語句,這可能很容易忘記。

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