inotifywait -m
es el modo "monitor" : nunca sale. El shell lo ejecuta y espera el código de salida para saber si se debe ejecutar el cuerpo del bucle, pero eso nunca llega.
Si lo elimina -m
, funcionará:
while inotifywait -r -e close_write "/root/secondfolder/"
do
echo "close_write"
done
produce
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.
...
Por defecto, inotifywait "saldrá después de que ocurra el primer evento", que es lo que desea en una condición de bucle.
En cambio, es posible que prefiera leer la salida estándar de inotifywait
:
#!/bin/bash
while read line
do
echo "close_write: $line"
done < <(inotifywait -mr -e close_write "/tmp/test/")
Este script (bash) leerá cada línea de salida del inotifywait
comando en la $line
variable dentro del bucle, utilizando la sustitución del proceso . Evita configurar los relojes recursivos en todo momento alrededor del ciclo, lo que puede ser costoso. Si no puede usar bash, se puede canalizar el comando en el bucle en su lugar: inotifywait ... | while read line ...
. inotifywait
produce una línea de salida para cada evento en este modo, por lo que el ciclo se ejecuta una vez para cada uno.