2017-05-09 11 views
1

私はLinuxには新しく、スクリプトのロックファイルの概念に精通していますが、別のスクリプトでこのコードを見てきましたが、どのように動作するのか分かりませんでした。クリーンアップファイルとファイナライズ機能が何をしているのかを十分に知る人はいますか?誰かがこのBashスクリプトが何をしているのかを説明できますか?

cleanup_file="$(mktemp -q)" 
finalize() 
{ 
    set +e 
    if test -f "$cleanup_file" 
    then 
    while read f 
    do 
     unlink "$f" 
    done < "$cleanup_file" 
    unlink "$cleanup_file" 
    fi 
} 

trap 'finalize' HUP INT QUIT TERM EXIT 
+0

あなたの質問には、スクリプト内で 'cleanup_file =" $(mktemp -q) "'で作成された 'temp'ファイルを使用する必要があります。 'trap'は' finalize'を呼び出します(本質的にスクリプトが終了するか、さもなければ殺されるたびに)。おそらく 'finalize'関数が取り除くものである一時ファイルにシンボリックリンクが書き込まれていると考えられます。 –

答えて

2

ロックファイルのためであればelse文とは対照的に、finalize機能は、すべてのロックを扱っていません。名前がクリーンアップファイル内にあるすべてのファイルを削除するだけです。クリーンアップファイルも削除されます。

大きなスクリプトは、クリーンアップファイルに一時ファイルの名前を追加し、trapシグナルハンドラは、スクリプトの終了時にクリーンアップを処理するように見えます。

+0

一時ファイルには、スクリプトの実行中に作成されたシンボリックリンクのリストが含まれている必要があります。 –

+0

クリーンアップファイルでスクリプトが 'unlink'を呼び出しているとすれば、' unlink'が 'rm'と同義に使われていると思います。 – codeforester

+0

それも同様に動作します。 –

関連する問題