Je veux un moyen simple et rapide d'exécuter une commande à chaque fois qu'un fichier est modifié. Je veux quelque chose de très simple, quelque chose que je laisserai tourner sur un terminal et que je fermerai dès que j'aurai fini de travailler sur ce fichier.
Actuellement, j'utilise ceci :
while read; do ./myfile.py ; done
Et ensuite, je dois aller dans ce terminal et appuyer sur Enter, chaque fois que j'enregistre ce fichier dans mon éditeur. Ce que je veux, c'est quelque chose comme ça :
while sleep_until_file_has_changed myfile.py ; do ./myfile.py ; done
Ou toute autre solution aussi simple que cela.
BTW : J'utilise Vim, et je sais que je peux ajouter une autocommande pour lancer quelque chose sur BufWrite, mais ce n'est pas le genre de solution que je veux maintenant.
Mise à jour: Je veux quelque chose de simple, jetable si possible. De plus, je veux quelque chose à exécuter dans un terminal parce que je veux voir la sortie du programme (je veux voir les messages d'erreur).
A propos des réponses: Merci pour toutes vos réponses ! Elles sont toutes très bonnes, et chacune adopte une approche très différente des autres. Comme je ne dois en accepter qu'une seule, j'accepte celle que j'ai effectivement utilisée (elle était simple, rapide et facile à mémoriser), même si je sais qu'elle n'est pas la plus élégante.
Solution utilisant Vim :
:au BufWritePost myfile.py :silent !./myfile.py
Mais je ne veux pas de cette solution parce que c'est un peu ennuyeux à taper, c'est un peu difficile de se rappeler ce qu'il faut taper, exactement, et c'est un peu difficile d'annuler ses effets (il faut exécuter :au ! BufWritePost monfichier.py
). De plus, cette solution bloque Vim jusqu'à ce que la commande ait fini de s'exécuter.
J'ai ajouté cette solution ici juste pour être complet, car elle pourrait aider d'autres personnes.
Pour afficher la sortie du programme (et perturber complètement votre flux d'édition, car la sortie s'écrira sur votre éditeur pendant quelques secondes, jusqu'à ce que vous appuyiez sur Entrée), supprimez la commande :silent
.
Jetez un œil à [incron][1]. Il est similaire à cron, mais utilise les événements inotify au lieu du temps.
[1] : http://inotify.aiken.cz/?section=incron&page=about&lang=fr
C'est un peu plus du côté de la programmation, mais vous voulez quelque chose comme [inotify][1]. Il existe des implémentations dans de nombreux langages, comme [jnotify][2] et [pyinotify][3].
Cette bibliothèque vous permet de surveiller des fichiers uniques ou des répertoires entiers, et renvoie des événements lorsqu'une action est découverte. Les informations renvoyées comprennent le nom du fichier, l'action (création, modification, renommage, suppression) et le chemin du fichier, entre autres informations utiles.
[1] : http://linux.die.net/man/7/inotify [2] : http://jnotify.sourceforge.net/ [3] : http://pyinotify.sourceforge.net/