编写一个自动重新运行文件保存命令的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
不隶属于 StackOverflow