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 sur 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 exécuter 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 qui s'exécute dans un terminal car 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.
0 votes
Possibilité de duplication de site croisé de : stackoverflow.com/questions/2972765/ ( bien qu'ici c'est le sujet =) )
0 votes
J'ai déjà référencé un duplicate cross site et il a été refusé :S ;)
4 votes
La solution de Jonathan Hartley s'appuie sur d'autres solutions proposées ici et corrige les gros problèmes des réponses les plus votées : absence de certaines modifications et inefficacité. Veuillez changer la réponse acceptée par la sienne, qui est également maintenue sur github à l'adresse suivante github.com/tartley/rerun2 (ou à une autre solution sans ces défauts)
0 votes
watch -g
se termine lorsque la sortie de la commande change, par exemple :while :; do watch -gn .1 stat -c %Z file.tex && pdflatex -interaction batchmode file.tex && pkill -HUP mupdf; done
. Où:
évalue àtrue
y-n .1
exécute la commande (stat
) toutes les 0,1 seconde.stat -c %Z
donne l'heure du dernier accès au fichier. L'inconvénient est que cela ne peut être arrêté qu'avec^Z
,kill %1
1 votes
@Zaz Au lieu de
while :; do …; done
j'utilise habituellementwhile sleep 1; do …; done
. De cette façon, je peux facilement^C
pendant lesleep
appel. De plus, il évite d'accaparer le CPU en limitant la boucle à une fréquence maximale de 1 Hz (réglable en modifiant la valeur de l'attributsleep
paramètres).