#!/usr/bin/env bash
# 获取当前执行文件目录路径
#basepath=$(cd `dirname $0`; pwd)
# 运行go命令
go run main.go &
while true
do
#查询目录下所有的go文件
#for file in `find . | grep -E "^.*go$"`
for file in `find . -name "*.go"`
do
# GetFileInfo是mac的命令,查询文件修改时间,linux可以采用stat命令
modified=`GetFileInfo ${file} | grep 'modified: ' | sed 's/modified: // '`
# 将更新时间转成时间戳
timestamp=`date -j -f "%m/%d/%Y %H:%M:%S" "${modified}" +%s`
# 获取当前系统时间戳
nowstamp=`date +%s`
# 计算两个时间差
diff=`expr $nowstamp - $timestamp`
# 修改时间小于2秒
if [ $diff -lt 2 ]
then
# 使用命令杀死go run main.go,执行两次是因为执行一次不生效,具体原因未知
lsof -i tcp:5000 | grep -v "PID" | awk '{print $2}' | xargs kill -9
# sleep 1
# lsof -i tcp:5000 | grep -v "PID" | awk '{print $2}' | xargs kill -9
# sleep 1
go run main.go &
break
fi
done
# 休眠一秒
sleep 1
done
# 程序结束,kill运行进程
lsof -i tcp:5000 | grep -v "PID" | awk '{print $2}' | xargs kill -9