2013-03-06 11 views
5

私は、その実行を助けるために一時ファイルに書き出すスクリプトを持っています。私のスクリプトの終わりに、私はrm filenameと呼んで、私が作成した一時ファイルをクリーンアップします。問題は、スクリプトがエラーのために終了するか、中断された場合です。このような場合、rmステートメントには決して到達せず、ファイルは決してクリーンアップされません。成功した出口であるかどうかにかかわらず、exitで実行するコマンドを指定できる方法はありますか?終了時にコマンドを実行する方法はありますか(スクリプトの終了方法にかかわらず)?

+0

はこちらをご覧スクリプトを終了する前に、あなたがそのようなコード - 何があるかもしれませんあなたは探しています http://stackoverflow.com/questions/64786/error-handling-in-bash – repoman

答えて

0

割り込みの場合は、onintrを使用して、ファイルを削除して終了するハンドラを指定できます。

2

はい。あなたが書くことができます。

trap 'rm filename' EXIT 

を(。§4.1 "Bourne Shell Builtins" of the Bash Reference Manualtrapの説明を参照してください)

を自然に誰かが突然だけでもマシンを抜いた場合、またはコマンドは、—などを実行されることはありません極端な状況がありますスクリプト—を実行しているBashインスタンスにSIGKILLを送信しますが、これは取得できる程度の信頼性があります。

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

+0

投稿した例を試してください。問題のファイルを削除する権限があれば正常に動作します。 – Martin

0

:SIGHUPなどのトラップ信号にスクリプトを設定しますSIGTERM。これはSIGKILL(捕まえられない)を除いてすべてを手伝ってくれます。 Googleの「bashスクリプトトラップ信号」nonsuccessful終了の場合

:構造あなたはrm filenameとの関数を呼び出す(あるいは単に文を置く)ことをあなたは

関連する問題