Bash:ファイル生成をポーリングし、終了時に終了します。

Bash:ファイル生成をポーリングし、終了時に終了します。

終了信号を取得して終了するスクリプトを作成しようとしています。一般的なbashトラップアプローチを使用する代わりに、10秒ごとにファイルの生成を監視して終了する前にいくつかの項目をクリーンアップしたいと思います。

私が試したことは次のとおりです。

poll_time=10 // poll every 10 seconds
((term_time=$SECONDS+240)) // monitor until 4 min from current script time exec

while (( $SECONDS < $term_time)) do
    if [[ -r $some_path/file.txt ]]; then
        cleanup_function
        exit
fi
sleep ${poll_time}
done

//if file doesnt exit continue with below code
//blah blah blah ....

もっと良い方法がありますか?上記のコード行が機能しますか?

ベストアンサー1

inotifywaitfromがinotify-tools必要です(少なくとも見てください)。次の行は、スクリプトで必要なものと同じことを行います。

inotifywait -e create --timeout 240 "${some_path}/file.txt" && { cleanup_function; exit ; }

違いinotifywaitは、イベントベースの方法で動作するため、ポーリングや睡眠が不要なことです。

おすすめ記事