在使用inotifywait时遇到问题,尝试查看golang更改的目录

时间:2012-12-02 18:51:24

标签: linux bash filesystems go inotify

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

1 个答案:

答案 0 :(得分:2)

这一行似乎错了:

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

应该是:

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

此外,默认情况下不使用kill -9请参阅In what order should I send signals to gracefully shutdown processes?