web-dev-qa-db-fra.com

Comment puis-je obtenir le nom de fichier des événements inotifywait?

Donc, je fais une simple boucle inotifywait pour surveiller les changements dans un répertoire Bootstrap:

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

Vous n'avez pas vraiment besoin de vous soucier des internes, mais je ne peux tout simplement pas récupérer le nom du fichier dans un champ bash. inotifywait renvoie le nom du fichier (avec l'aide de l'argument de format), mais comment puis-je le capturer et l'utiliser plus tard (dans mon cas, en tant que $filename)?


Si vous voulez un harnais de test simple et court:

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

Et ensuite, vous pouvez simplement lancer touch testfile lorsque vous voulez le déclencher.

5
Oli

La manière la plus propre est illustrée dans cette entrée de blog :

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

Il s'avère que je devais simplement restructurer la while afin de capturer le résultat de inotifywait:

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

Je suis toujours curieux de savoir s'il existe des moyens plus propres de le faire.

3
Oli