Como obtenho o nome do arquivo dos eventos inotifywait?

4

Por isso, estou fazendo um simples loop inotifywait para observar as alterações em um diretório do Bootstrap:

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

Você realmente não precisa se preocupar com os internos, mas eu simplesmente não consigo colocar o nome do arquivo novamente em um escopo básico. inotifywait echos fora do nome do arquivo (com ajuda do argumento format) mas como capturar isso e usá-lo mais tarde (no meu caso, como $filename )?

Se você quiser um equipamento de teste simples e curto:

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

Você pode executar touch testfile quando quiser acioná-lo.

    
por Oli 03.12.2013 / 10:11

2 respostas

16

A maneira mais limpa é ilustrada em esta entrada de blog :

inotifywait -m -r -q --format '%w' bootstrap/ | while read FILE
do
  echo "something happened on path $FILE"
done
    
por abergmeier 14.05.2014 / 16:39
2

Acontece que eu precisava apenas reestruturar o while para que eu capturasse a saída de inotifywait :

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

Ainda estou curioso para saber se existem maneiras mais limpas de fazer isso.

    
por Oli 03.12.2013 / 10:32