2013-03-06 61 views
5

我有一個腳本寫出臨時文件來幫助它的執行。在我的腳本結尾,我只需撥打rm filename來清理我創建的臨時文件。問題是腳本由於錯誤或被中斷而結束。在這些情況下,rm聲明永遠不會到達,因此文件永遠不會被清理。有沒有一種方法可以指定一些命令在退出時運行,而不管它是否成功退出?有沒有辦法在退出時執行命令(無論腳本如何退出)?

+0

看看這裏之前 - 可能是什麼你正在尋找 http://stackoverflow.com/questions/64786/error-handling-in-bash – repoman 2013-03-06 23:14:14

回答

0

對於中斷,您可以使用onintr指定一個處理程序來刪除文件,然後退出。

2

是;你可以這樣寫:

trap 'rm filename' EXIT 

(見的trap的描述§4.1 "Bourne Shell Builtins" of the Bash Reference Manual

當然有些情況下該命令將不會運行—如極端情況下,如果有人突然拔掉機器,甚至只是將SIGKILL發送到運行腳本—的Bash實例,但是這可以獲得儘可能可靠的結果。

2

是的,你可以使用trap像這樣:

trap "rm -f filename" EXIT 

腳本可能看起來像這樣:

#/bin/bash 
trap "rm -f filename" EXIT # remove file when script exits 
touch filename    # create file 
some-invalid-command   # trigger an error 
+0

嗯,這似乎並沒有爲我工作。當腳本退出時,這些文件仍然存在 – imnotfred 2013-03-06 23:24:07

+0

請嘗試我發佈的示例,如果您有權刪除相關文件,應該可以正常工作。 – Martin 2013-03-07 00:41:48

0

對於中斷:設置腳本像SIGHUP和陷阱信號SIGTERM。除了SIGKILL(無法捕獲)之外,這將幫助你完成所有任務。谷歌「bash腳本陷阱信號」

對於nonsuccessful退出:結構你的代碼,這樣你打電話rm文件名的函數(或者只是把語句)退出腳本