inotifywait -m
è la modalità "monitor" : non esce mai. La shell lo esegue e attende che il codice di uscita sappia se eseguire il corpo del ciclo, ma non arriva mai.
Se rimuovi -m
, funzionerà:
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.
...
Per impostazione predefinita, inotifywait "termina dopo che si è verificato il primo evento", che è ciò che si desidera in una condizione di loop.
Invece, potresti preferire leggere l'output standard di inotifywait
:
#!/bin/bash
while read line
do
echo "close_write: $line"
done < <(inotifywait -mr -e close_write "/tmp/test/")
Questo script (bash) leggerà ogni riga di output del inotifywait
comando nella $line
variabile all'interno del ciclo, usando la sostituzione del processo . Evita di impostare gli orologi ricorsivi ogni volta intorno al circuito, il che potrebbe essere costoso. Se non è possibile utilizzare bash, è possibile reindirizzare il comando nel ciclo invece: inotifywait ... | while read line ...
. inotifywait
produce una riga di output per ciascun evento in questa modalità, quindi il ciclo viene eseguito una volta per ciascuno.