Написание функции Zsh, которая автоматически повторяет команду при сохранении файла.

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

Вопрос

Я хочу написать функцию 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top