【发布时间】:2012-11-20 06:53:38
【问题描述】:
我正在尝试编写一个 bash 脚本来监视目录的更改。如果文件是 .go 或 .html 文件,我想终止特定进程然后启动它。
这到处都是失败的,我不知道为什么。在搜索了很多网站寻求帮助后,我尽了最大努力让这个工作,但我无法得到它。
理想的解决方案是我会通过传递一个目录和一个文件来运行它,它只会在我保存文件时重新加载进程。
我是这样运行的:
./gowatcher /path/to/my/directory/to/watch foo.go
这是我目前所拥有的:
#!/usr/bin/env bash
WATCH_DIR=$1
FILENAME=$2
function restart_goserver() {
if go run $FILENAME
then
pkill -9 -f $FILENAME > /dev/null 2>&1
pkill -9 -f a.out > /dev/null 2>&1
go run $FILENAME &
echo "started $FILENAME"
else
echo "server restart failed"
fi
}
cd $WATCH_DIR
restart_goserver
echo "watching directory: $WATCH_DIR"
inotifywait -mrq -e close_write $WATCH_DIR | while read file
do
if grep -E '^(.*\.go)|(.*\.html)$'
then
echo "--------------------"
restart_goserver
fi
done
【问题讨论】:
-
那是什么让你说它不起作用?
-
因为我下午的大部分时间都在努力让它工作,它没有正确监视目录的更改 + 杀死/运行提供的 go 文件。
标签: linux bash filesystems go inotify