我想写一个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