-3

ディレクトリの変更を監視する bash スクリプトを作成しようとしています。ファイルが .go または .html ファイルの場合、特定のプロセスを強制終了してから開始したいと思います。

これはいたるところで失敗しており、その理由はわかりません。ヘルプを求めて多くの Web サイトを精査した後、これを機能させるために最善を尽くしましたが、取得できません。

理想的な解決策は、実行するディレクトリとファイルを渡して実行し、ファイルを保存するときにプロセスをリロードすることです。

私はそれを次のように実行しています:

./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
4

1 に答える 1

2

この行は間違っているようです:

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

する必要があります:

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

さらに、デフォルトでは使用しないでください!kill -9プロセスを正常にシャットダウンするために、どのような順序でシグナルを送信する必要がありますか?を参照してください。

于 2012-12-02T20:17:15.700 に答える