inotifywait -m
adalah mode "monitor" : tidak pernah keluar. Shell menjalankannya dan menunggu kode keluar untuk mengetahui apakah akan menjalankan tubuh loop, tetapi itu tidak pernah datang.
Jika Anda menghapus -m
, itu akan berhasil:
while inotifywait -r -e close_write "/root/secondfolder/"
do
echo "close_write"
done
menghasilkan
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.
...
Secara default, inotifywait akan "keluar setelah peristiwa pertama terjadi", yang Anda inginkan dalam kondisi loop.
Sebagai gantinya, Anda mungkin lebih suka membaca output standar inotifywait
:
#!/bin/bash
while read line
do
echo "close_write: $line"
done < <(inotifywait -mr -e close_write "/tmp/test/")
Skrip (bash) ini akan membaca setiap baris output dari inotifywait
perintah ke dalam $line
variabel di dalam loop, menggunakan proses substitusi . Ini menghindari pengaturan jam tangan rekursif setiap kali di loop, yang mungkin mahal. Jika Anda tidak dapat menggunakan bash, Anda dapat pipa perintah ke loop sebagai gantinya: inotifywait ... | while read line ...
. inotifywait
menghasilkan satu garis output untuk setiap peristiwa dalam mode ini, sehingga loop berjalan satu kali untuk masing-masing.