Shell 编写一个Zsh函数,在保存文件时自动重新运行命令
我想写一个Zsh函数,它看起来像:Shell 编写一个Zsh函数,在保存文件时自动重新运行命令,shell,zsh,inotify,inotify-tools,Shell,Zsh,Inotify,Inotify Tools,我想写一个Zsh函数,它看起来像: smartwatch [WATCH_FILE] [COMMAND_TO_RUN] [COMMAND_ARGS] 这样,在保存WATCH_文件后,将运行命令_TO_RUN,并且智能手表将等待再次保存文件。在这种情况下,这对我很有帮助: smartwatch server.py python server.py 因此,每次我修改服务器文件时,服务器都会重新启动。我听说这可能会有所帮助,所以我正在使用inotifywait,但如果有人知道更好的工具,请告诉我。以
smartwatch [WATCH_FILE] [COMMAND_TO_RUN] [COMMAND_ARGS]
这样,在保存WATCH_文件
后,将运行命令_TO_RUN
,并且智能手表
将等待再次保存文件。在这种情况下,这对我很有帮助:
smartwatch server.py python server.py
因此,每次我修改服务器文件时,服务器都会重新启动。我听说这可能会有所帮助,所以我正在使用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
}
因此,您应该能够在save“python server.py”server.py上运行
,
inotifywait将在任何事件发生时完成。您可能希望指定“-e modify-e move_self-e delete_self”以防止在任何进程读取该文件时重新启动守护进程。