Faire quelque chose lorsqu'un fichier est modifié


10

Lorsque j'écris un document LaTeX, je me retrouve à appuyer sur F6 dans mon éditeur pour compiler souvent. Ou lorsque j'utilise SASS, je tape souvent makepour convertir mon .scssen .css.

Maintenant, je voudrais laisser la machine faire le sale boulot et exécuter makeou autre chose à chaque fois qu'un fichier donné change.

Jusqu'à présent, j'ai gardé une fenêtre de terminal ouverte et j'ai appuyé sur flèche vers le haut et retour. Ou j'ai utilisé watch make, mais cela semble être une solution étrange.

Existe-t-il un moyen agréable sous Linux de faire quelque chose lorsqu'un fichier donné change?

Réponses:


4

Vous recherchez inotifywait, une partie des outils inotify . Il existe quelques exemples de la façon de l'utiliser sur le site du projet, mais une approche simple est,

while true; do inotifywait code.cpp -e modify; make; done

dont la partie clé est,

inotifywait code.cpp -e modify

Cette commande attendra que code.cppsoit modifiée puis quitte. Mettre dans la boucle infinie et suivi de le makefait reconstruire constamment après chaque modification.

En plus d'attendre la modification, vous pouvez attendre la création, la suppression, l'accès, l'ouverture, la fermeture, etc. Je recommande fortement de consulter les exemples de projet et la page de manuel inotifywait pour d'autres idées sur la façon dont il peut être utilisé.


C'est exactement ce que je recherche!
Martin Ueding

1

Jetez un œil à incron , un package de type cron qui répond aux événements du système de fichiers, au lieu des événements de temps. Le paquet se compose d'un démon ( incrond) et d'un manipulateur de table ( incrontab), analogue à la paire crond/ crontabcron bien connue .

Avec incron, vous pouvez facilement organiser l'exécution à makechaque fois que des fichiers et / ou des répertoires particuliers sont modifiés.


Cela semble un peu exagéré d'une part, mais d'autre part, c'est juste le bon outil. Je vais devoir le vérifier, je peux peut-être l'activer et le désactiver pour chaque session de programmation.
Martin Ueding

0

Plutôt que watch make, qu'en est-il watch ls? Puis juste au makemoment où l'horodatage change.


Eh bien, make vérifie déjà les horodatages, il est donc assez inutile de vérifier l'heure, puis de laisser make vérifier l'heure à nouveau.
Martin Ueding

C'est vrai, mais exécuter make est plus cher que d'exécuter ls.
Scott C Wilson

1
Et si mon makefile est juste deux lignes pour ce single .tex? Pensez-vous que cela vaudrait la peine d'écrire un lsanalyseur?
Martin Ueding
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.