【问题标题】:Having trouble with inotifywait, trying to watch a directory for golang changes [closed]遇到 inotifywait 问题,尝试查看 golang 更改的目录 [关闭]
【发布时间】: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


【解决方案1】:

这行好像错了:

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

应该是:

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

另外,默认不要使用kill -9!见In what order should I send signals to gracefully shutdown processes?

【讨论】:

  • 我把它放在那里,它仍然不起作用。如果可以引入更好的解决方案,我也切换到 zsh。
猜你喜欢
  • 1970-01-01
  • 2014-08-13
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 1970-01-01
  • 2018-09-25
  • 2023-03-03
相关资源
最近更新 更多