Scrivere una funzione ZSH che automaticamente riesce a un comando sul salvataggio dei file
-
11-12-2019 - |
Domanda
Voglio scrivere una funzione ZSH che sembra:
smartwatch [WATCH_FILE] [COMMAND_TO_RUN] [COMMAND_ARGS]
.
tale che dopo WATCH_FILE
viene salvato, che COMMAND_TO_RUN
verrà eseguito e smartwatch
attenderà che il file venga salvato di nuovo.Questo sarebbe utile per me in questo scenario:
smartwatch server.py python server.py
.
Quindi ogni volta che modifico il file del server, il server viene riavviato.Ho sentito che inotify-tools potrebbe essere in grado di aiutare,Quindi sto usando inotifywait
, ma se qualcuno conosce uno strumento migliore, fammi sapere.Ecco cosa ho finora:
smartwatch() {
WATCH=$1
CMD=$2
ARGS=$*[3,-1]
$CMD $ARGS &!
PID=$!
inotifywait -qq $WATCH
kill $PID
exec smartwatch $WATCH $CMD $ARGS
}
.
Questa soluzione è piuttosto lenta e non molto elegante.Qualcuno conosce un modo per rendere questo più efficiente o almeno più pulito?
Soluzione
Dopo alcuni giocherelloni, ecco cosa ho finito con:
onsave() {
while true
do
eval "$1 &!"
trap "kill $! &> /dev/null; return;" SIGINT SIGTERM
inotifywait -e modify -qq $2
kill $! &> /dev/null
done
}
.
Quindi dovresti essere in grado di eseguire onsave "python server.py" server.py