7

実行を支援するために一時ファイルに書き出すスクリプトがあります。スクリプトの最後で、rm filename作成した一時ファイルをクリーンアップするために呼び出すだけです。問題は、スクリプトがエラーで終了したり、中断されたりした場合です。これらの場合、rmステートメントに到達しないため、ファイルがクリーンアップされることはありません。終了が成功したかどうかに関係なく、終了時に実行するコマンドを指定する方法はありますか?

4

4 に答える 4

4

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
于 2013-03-06T23:14:02.083 に答える
2

はい; あなたは書ける:

trap 'rm filename' EXIT

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

当然のことながら、コマンドが実行されない極端な状況もあります。たとえば、誰かが突然マシンのプラグを抜いた場合やSIGKILL、スクリプトを実行している Bash インスタンスに送信した場合などです。しかし、これは得られる限りの信頼性です。

于 2013-03-06T23:13:51.473 に答える
0

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

于 2013-03-06T23:13:41.177 に答える
0

割り込みの場合: SIGHUP や SIGTERM などのシグナルをトラップするようにスクリプトをセットアップします。これは、SIGKILL (捕まえられない) 以外のすべてに役立ちます。Google「bash スクリプト トラップ シグナル」

失敗した終了の場合: スクリプトを終了する前に、ファイル名を rm する関数を呼び出す (または単にステートメントを配置する) ようにコーディングする構造

于 2013-03-06T23:14:16.743 に答える