eye.sh new ver

posts
serr 2025-04-13 17:06:27 +03:00
parent 5f52a4dd7b
commit e10f131a5a
1 changed files with 37 additions and 25 deletions

62
eye.sh
View File

@ -3,29 +3,28 @@ stty -echoctl # Отключает вывод управляющих симво
# НАСТРОЙКА СКРИПТА ТУТ ########################################################### # НАСТРОЙКА СКРИПТА ТУТ ###########################################################
DURATION=1 # Задержка между проверками в секундах DURATION=1 # Задержка между проверками в секундах
WATCH_DIRS=("posts" "mvc" "assets" "tools") # Массив директорий для наблюдения WATCH_TARGETS=("assets" "mvc" "posts" "tools" "main.go") # Массив целей для наблюдения (директории и файлы)
BINARY_PATH="./main" # Путь до бинарного файла BINARY_PATH="./main" # Путь до бинарного файла
BUILD_CMD="go build -o $BINARY_PATH main.go" # Команда для сборки BUILD_CMD="go build -o $BINARY_PATH main.go" # Команда для сборки
################################################################################### ###################################################################################
# Массивы для хранения информации о директориях # Массивы для хранения информации о целях
declare -A LAST_MODS declare -A LAST_MODS
declare -A LAST_COUNTS declare -A LAST_COUNTS
CLEANUP_DONE=0 CLEANUP_DONE=0
#
# Вывод в синем цвете # Вывод в синем цвете
blue() { blue() {
echo -e "\033[34m$1\033[0m" echo -e "\033[34mEYE | $1\033[0m"
} }
# Очистка при завершении работы скрипта # Очистка при завершении работы скрипта
cleanup() { cleanup() {
[ $CLEANUP_DONE -eq 1 ] && exit 0 [ $CLEANUP_DONE -eq 1 ] && exit 0
blue "EYE | cleanup..." blue "cleanup..."
kill_proc $1 kill_proc $1
rm -f $BINARY_PATH rm -f $BINARY_PATH
blue "EYE | see you later!" blue "see you later!"
CLEANUP_DONE=1 CLEANUP_DONE=1
exit 0 exit 0
} }
@ -35,23 +34,33 @@ kill_proc() {
local pid=$1 local pid=$1
if [ -n "$pid" ] && kill -0 $pid 2>/dev/null; then if [ -n "$pid" ] && kill -0 $pid 2>/dev/null; then
kill $pid kill $pid
blue "EYE | process killed (PID: $pid)" blue "process killed (PID: $pid)"
fi fi
} }
# Проверка изменений в директориях # Проверка изменений в целях
check_changes() { check_changes() {
local changed=0 local changed=0
for dir in "${WATCH_DIRS[@]}"; do for target in "${WATCH_TARGETS[@]}"; do
local current_mod=$(find "$dir" -type f -exec stat -c %Y {} \; | sort -nr | head -1) local current_mod=0
local current_count=$(find "$dir" -type f 2>/dev/null | wc -l) local current_count=0
if { [ -n "$current_mod" ] && [ "$current_mod" -gt "${LAST_MODS[$dir]}" ]; } || [ "$current_count" -ne "${LAST_COUNTS[$dir]}" ]; then if [ -f "$target" ]; then
# Обработка файла
current_mod=$(stat -c %Y "$target")
current_count=1
elif [ -d "$target" ]; then
# Обработка директории
current_mod=$(find "$target" -type f -exec stat -c %Y {} \; | sort -nr | head -1)
current_count=$(find "$target" -type f | wc -l)
fi
if { [ -n "$current_mod" ] && [ "${LAST_MODS[$target]:-0}" -lt "$current_mod" ]; } || [ "${LAST_COUNTS[$target]:-0}" -ne "$current_count" ]; then
changed=1 changed=1
LAST_MODS["$dir"]=$current_mod LAST_MODS["$target"]=$current_mod
LAST_COUNTS["$dir"]=$current_count LAST_COUNTS["$target"]=$current_count
[ -n "$1" ] && blue "EYE | changes detected in \033[94m$dir\033[0m" [ -n "$1" ] && blue "changes detected in \033[94m$target\033[0m"
fi fi
done done
@ -64,30 +73,33 @@ main() {
# Ловушка для сигналов завершения # Ловушка для сигналов завершения
trap 'cleanup $pid' SIGINT SIGTERM SIGHUP SIGQUIT EXIT trap 'cleanup $pid' SIGINT SIGTERM SIGHUP SIGQUIT EXIT
#
# Инициализация массивов # Инициализация массивов
for dir in "${WATCH_DIRS[@]}"; do for target in "${WATCH_TARGETS[@]}"; do
LAST_MODS["$dir"]=0 if [ -f "$target" ]; then
LAST_COUNTS["$dir"]=$(find "$dir" -type f 2>/dev/null | wc -l) LAST_MODS["$target"]=0
blue "EYE | started watching the directory \033[94m$dir\033[0m" LAST_COUNTS["$target"]=1
elif [ -d "$target" ]; then
LAST_MODS["$target"]=0
LAST_COUNTS["$target"]=$(find "$target" -type f 2>/dev/null | wc -l)
fi
blue "started watching \033[94m$target\033[0m"
done done
#
# Основной цикл работы скрипта # Основной цикл работы скрипта
while true; do while true; do
check_changes $pid check_changes $pid
if [ $? -eq 1 ]; then if [ $? -eq 1 ]; then
blue "EYE | rebuilding..." blue "rebuilding..."
$BUILD_CMD $BUILD_CMD
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
blue "EYE | build successful. restarting..." blue "build successful. restarting..."
kill_proc $pid kill_proc $pid
$BINARY_PATH & $BINARY_PATH &
pid=$! pid=$!
blue "EYE | started new process (PID: $pid)" blue "started new process (PID: $pid)"
else else
blue "EYE | build failed" blue "build failed"
fi fi
fi fi