6

inotifywaitinotify-toolsから)監視するSphinxドキュメントのフォルダーがあります。このスクリプトは、html と singlehtml を再構築し、Chrome を更新します。

#!/bin/sh
inotifywait -mr source --exclude _build -e close_write -e create -e delete -e move | while read file event; do
    make html singlehtml
    xdotool search --name Chromium key --window %@ F5
done

単一のファイルを保存すると、これは正常に機能します。ただし、hg update古いリビジョンに移動するか、sourceフォルダーに複数のファイルを貼り付けると、すべてのファイルに対してスクリプトが起動します。

スクリプトを起動する前に数分の一秒待機させる簡単な回避策はありますか (カスタム python スクリプトを記述せずに、これを行うことができます)。

4

2 に答える 2

10

もう少し複雑なシェル スクリプトを作成し、記事に投稿しました。

inotifywait -mr source --exclude _build -e close_write -e create -e delete -e move --format '%w %e %T' --timefmt '%H%M%S' | while read file event tm; do
    current=$(date +'%H%M%S')
    delta=`expr $current - $tm`
    if [ $delta -lt 2 -a $delta -gt -2 ] ; then
        sleep 1  # sleep 1 set to let file operations end
        make html singlehtml
        xdotool search --name Chromium key --window %@ F5
    fi
done

inotifywaitファイル名とアクションだけでなく、タイムスタンプもログに記録します。スクリプトはタイムスタンプを現在の unixtime と比較し、差分が 2 秒未満の場合は実行されmake htmlます。ただし、その前に、ファイル操作を終了させるために 1 秒間スリープします。次に変更されたファイルでは、タイムスタンプが古くなり、デルタが 2 秒を超え、何も実行されません。

この方法は、CPU の消費が最も少なく、最も信頼性が高いことがわかりました。

単純な Python スクリプトも実行してみましたが、jQueryUI のような大きなものをフォルダーに貼り付けると、1000 のプロセスが生成されてゾンビになります。

于 2012-10-09T19:31:58.683 に答える