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?

Martin Ueding
la source

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é.

lostriebo
la source
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.

Steven Monday
la source
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.

Scott C Wilson
la source
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