Написание функции Zsh, которая автоматически запускает команду сохранения файла
Я хочу написать функцию Zsh, которая выглядит следующим образом:
smartwatch [WATCH_FILE] [COMMAND_TO_RUN] [COMMAND_ARGS]
Такой, что после WATCH_FILE
сохраняется, что COMMAND_TO_RUN
будет работать и smartwatch
будет ждать, пока файл будет сохранен снова. Это было бы полезно для меня в этом сценарии:
smartwatch server.py python server.py
Поэтому каждый раз, когда я изменяю файл сервера, сервер перезапускается. Я слышал, что inotify-tools могут помочь, поэтому я использую inotifywait
, но если кто-то знает лучший инструмент, дайте мне знать. Вот что у меня так далеко:
smartwatch() {
WATCH=$1
CMD=$2
ARGS=$*[3,-1]
$CMD $ARGS &!
PID=$!
inotifywait -qq $WATCH
kill $PID
exec smartwatch $WATCH $CMD $ARGS
}
Это решение довольно медленное и не очень элегантное. Кто-нибудь знает способ сделать это более эффективным или хотя бы чище?
1 ответ
Решение
После некоторой тряски вот что я закончил:
onsave() {
while true
do
eval "$1 &!"
trap "kill $! &> /dev/null; return;" SIGINT SIGTERM
inotifywait -e modify -qq $2
kill $! &> /dev/null
done
}
Таким образом, вы должны быть в состоянии бежать onsave "python server.py" server.py