inotifywait -m
「モニター」モードです。決して終了しません。シェルはそれを実行し、終了コードがループの本体を実行するかどうかを知るのを待ちますが、それは決して起こりません。
を削除すると-m
、機能します。
while inotifywait -r -e close_write "/root/secondfolder/"
do
echo "close_write"
done
作り出す
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
/root/secondfolder/ CLOSE_WRITE,CLOSE bar
close_write
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
...
デフォルトでは、inotifywaitは「最初のイベントが発生した後に終了」します。これは、ループ条件で必要なものです。
代わりに、次の標準出力を読むことをお勧めしますinotifywait
。
#!/bin/bash
while read line
do
echo "close_write: $line"
done < <(inotifywait -mr -e close_write "/tmp/test/")
この(bash)スクリプトは、プロセス置換を使用inotifywait
して、コマンドの各出力行を$line
ループ内の変数に読み取ります。ループ全体で毎回再帰的なウォッチを設定することを避けます。bashを使用できない場合は、代わりにコマンドをループにパイプすることができます。このモードでは、イベントごとに1行の出力が生成されるため、ループはそれぞれ1回実行されます。inotifywait ... | while read line ...
inotifywait