web-dev-qa-db-ja.com

inotifywaitイベントからファイル名を取得するにはどうすればよいですか?

そこで、単純なinotifywaitループを実行して、Bootstrapディレクトリの変更を監視しています。

while inotifywait -r -q --format %w bootstrap/; do
    echo "something happened"
    [[ $filename == *.js ]] && uglifyjs .....
    [[ $filename == *.less ]] && lessc bootstrap.less
done

内部について心配する必要はありませんが、ファイル名をbashスコープに戻すことはできません。 inotifywaitは(format引数の助けを借りて)ファイル名をエコーアウトしますが、それをキャプチャして後で使用するにはどうすればよいですか(私の場合、$filenameとして)?


シンプルで短いテストハーネスが必要な場合:

touch testfile
while inotifywait testfile do; echo "..."; done

そして、トリガーしたいときにtouch testfileを実行するだけです。

5
Oli

よりクリーンな方法は このブログエントリ に示されています。

inotifywait -m -r -q --format '%w' bootstrap/ | while read FILE
do
  echo "something happened on path $FILE"
done
18
abergmeier

whileの出力をキャプチャするために、inotifywaitを再構築する必要がありました。

while true; do
    echo "something happened"
    filename=$(inotifywait -r -q --format %w bootstrap/)
    [[ $filename == *.js ]] && uglifyjs .....
    [[ $filename == *.less ]] && lessc bootstrap.less
done

これを行うためのよりクリーンな方法があるかどうかを知りたいと思っています。

3
Oli