Как мне получить имя файла из событий inotifywait?

Так что я делаю простой inotifywait цикл для отслеживания изменений в каталоге Bootstrap:

while inotifywait -r -q --format %w bootstrap/; do
    echo "something happened"
    [[ $filename == *.js ]] && uglifyjs .....
    [[ $filename == *.less ]] && lessc bootstrap.less
done

Вам не нужно беспокоиться о внутренностях, но я просто не могу вернуть имя файла в область видимости bash. inotifywait выведите имя файла (с помощью аргумента формата), но как мне его перехватить и использовать позже (в моем случае, как $filename)?


Если вы хотите простой, короткий тестовый комплект:

touch testfile
while inotifywait testfile do; echo "..."; done

И тогда вы можете просто запустить touch testfile когда вы хотите вызвать его.

2 ответа

Решение

Более чистый способ проиллюстрирован в этой записи блога:

inotifywait -m -r -q --format '%w' bootstrap/ | while read FILE
do
  echo "something happened on path $FILE"
done

Оказывается, мне просто нужно было реструктурировать while так что я захватил вывод inotifywait:

while true; do
    echo "something happened"
    filename=$(inotifywait -r -q --format %w bootstrap/)
    [[ $filename == *.js ]] && uglifyjs .....
    [[ $filename == *.less ]] && lessc bootstrap.less
done

Мне все еще интересно узнать, есть ли более чистые способы сделать это.

Другие вопросы по тегам