0

我想编写一个看起来像这样的 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
}    

这个解决方案相当慢而且不是很优雅。任何人都知道一种方法可以提高效率或至少更清洁?

4

1 回答 1

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

于 2012-05-20T03:28:33.687 回答