Écriture d'une fonction Zsh qui réexécute automatiquement une commande lors de l'enregistrement du fichier

StackOverflow https://stackoverflow.com//questions/10657779

Question

Je veux écrire une fonction Zsh qui ressemble à :

smartwatch [WATCH_FILE] [COMMAND_TO_RUN] [COMMAND_ARGS]

De telle sorte qu'après WATCH_FILE est sauvé, que COMMAND_TO_RUN sera exécuté et smartwatch attendra que le fichier soit à nouveau enregistré.Cela me serait utile dans ce scénario :

smartwatch server.py python server.py

Ainsi, chaque fois que je modifie le fichier du serveur, le serveur est redémarré.J'ai entendu dire que outils inotify pourrait peut-être aider, alors j'utilise inotifywait, mais si quelqu'un connaît un meilleur outil, faites-le-moi savoir.Voici ce que j'ai jusqu'à présent :

smartwatch() {                      
   WATCH=$1                         
   CMD=$2                           
   ARGS=$*[3,-1]                    
   $CMD $ARGS &!                    
   PID=$!                           
   inotifywait -qq $WATCH           
   kill $PID                        
   exec smartwatch $WATCH $CMD $ARGS
}    

Cette solution est plutôt lente et peu élégante.Quelqu'un connaît-il un moyen de rendre cela plus efficace ou au moins plus propre ?

Était-ce utile?

La solution

Après quelques manipulations, voici ce que j'ai obtenu :

onsave() {
   while true
   do
      eval "$1 &!"
      trap "kill $! &> /dev/null; return;" SIGINT SIGTERM
      inotifywait -e modify -qq $2
      kill $! &> /dev/null
   done
}

Donc tu devrais pouvoir courir onsave "python server.py" server.py

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top