Написание функции Zsh, которая автоматически повторяет команду при сохранении файла.
-
11-12-2019 - |
Вопрос
Я хочу написать функцию Zsh, которая выглядит так:
smartwatch [WATCH_FILE] [COMMAND_TO_RUN] [COMMAND_ARGS]
Такой, что после WATCH_FILE
сохраняется, что COMMAND_TO_RUN
будет запущен и smartwatch
будет ждать повторного сохранения файла.Это было бы полезно для меня в этом сценарии:
smartwatch server.py python server.py
Поэтому каждый раз, когда я изменяю файл сервера, сервер перезапускается.я это слышал inotify-инструменты может быть смогу помочь, поэтому я использую inotifywait
, но если кто-то знает инструмент получше, дайте мне знать.Вот что у меня есть на данный момент:
smartwatch() {
WATCH=$1
CMD=$2
ARGS=$*[3,-1]
$CMD $ARGS &!
PID=$!
inotifywait -qq $WATCH
kill $PID
exec smartwatch $WATCH $CMD $ARGS
}
Это решение довольно медленное и не очень элегантное.Кто-нибудь знает способ сделать это более эффективным или хотя бы чище?
Решение
После некоторых возни вот что у меня получилось:
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