在 inotifywait 时遇到问题,试图监视目录以了解 golang 更改



我正在尝试编写一个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

这一行似乎错了:

grep -E '^(.*.go)|(.*.html)$'

应该是 :

echo "$file" | grep -E '^(.*.go)|(.*.html)$'

此外,默认情况下不要使用kill -9请参阅我应该按什么顺序发送信号以正常关闭进程?

相关内容

  • 没有找到相关文章

最新更新