Inotifywait не работает при использовании внутреннего сценария bash

Я пытаюсь создать сценарий bash с inotiy-tools, который будет отслеживать каталог.

Вот мой сценарий

while f=$(inotifywait -m -e create -q -r "/media/data2/Music/English"  --format '%f %w')
do
    echo "$f"
done

Проблема в том, что когда я запускаю приведенный выше скрипт, он ничего не печатает на терминале. Я проверил команду inotifywait, и она отлично работает на терминале, но почему она не работает внутри моего скрипта.

inotifywait на терминале

noob@noob:~$ inotifywait -m -e create -q -r /media/data2/Music/English  --format '%f %w'
hello /media/data2/Music/English/

person RanRag    schedule 09.07.2012    source источник


Ответы (2)


Проблема в том, что f=$(inotifywait... ждет завершения этой команды и только после этого выдает вам вывод.

Я редко пишу bash, но вы можете попробовать:

inotifywait .... |
while read line
do
    echo $line
done
person cnicutar    schedule 09.07.2012
comment
Также вы можете указать мне на правильную документацию, в которой говорится, что $() ждет завершения этой команды и только затем выдает результат. - person RanRag; 09.07.2012

Не используйте переключатель -m в этом контексте, иначе команда inotifywait никогда не вернет управление циклу while.

person tupiniquim    schedule 17.01.2021