From dfdf3b0b35dd4ed2fa212266740f51ef11d53a86 Mon Sep 17 00:00:00 2001 From: serr Date: Sun, 13 Apr 2025 16:51:47 +0300 Subject: [PATCH] =?UTF-8?q?=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BC?= =?UTF-8?q?=D0=BE=D0=B6=D0=BD=D0=BE=20=D1=81=D0=BB=D0=B5=D0=B4=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=B7=D0=B0=20=D0=BA=D0=BE=D0=BD=D0=BA=D1=80=D0=B5?= =?UTF-8?q?=D1=82=D0=BD=D1=8B=D0=BC=D0=B8=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- eye.sh | 48 ++++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/eye.sh b/eye.sh index 6897add..9a70efc 100755 --- a/eye.sh +++ b/eye.sh @@ -3,16 +3,15 @@ stty -echoctl # Отключает вывод управляющих симво # НАСТРОЙКА СКРИПТА ТУТ ########################################################### DURATION=1 # Задержка между проверками в секундах -WATCH_DIRS=("empty" "folder1" "folder2") # Массив директорий для наблюдения +WATCH_TARGETS=("empty" "folder1" "folder2" "main.go" "no" "no.go") # Массив целей для наблюдения (директории и файлы) BINARY_PATH="./main" # Путь до бинарного файла BUILD_CMD="go build -o $BINARY_PATH main.go" # Команда для сборки ################################################################################### -# Массивы для хранения информации о директориях +# Массивы для хранения информации о целях declare -A LAST_MODS declare -A LAST_COUNTS CLEANUP_DONE=0 -# # Вывод в синем цвете blue() { @@ -39,19 +38,29 @@ kill_proc() { fi } -# Проверка изменений в директориях +# Проверка изменений в целях check_changes() { local changed=0 - for dir in "${WATCH_DIRS[@]}"; do - local current_mod=$(find "$dir" -type f -exec stat -c %Y {} \; | sort -nr | head -1) - local current_count=$(find "$dir" -type f 2>/dev/null | wc -l) + for target in "${WATCH_TARGETS[@]}"; do + local current_mod=0 + 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 - LAST_MODS["$dir"]=$current_mod - LAST_COUNTS["$dir"]=$current_count - [ -n "$1" ] && blue "EYE | changes detected in \033[94m$dir\033[0m" + LAST_MODS["$target"]=$current_mod + LAST_COUNTS["$target"]=$current_count + [ -n "$1" ] && blue "EYE | changes detected in \033[94m$target\033[0m" fi done @@ -64,22 +73,25 @@ main() { # Ловушка для сигналов завершения trap 'cleanup $pid' SIGINT SIGTERM SIGHUP SIGQUIT EXIT - # # Инициализация массивов - for dir in "${WATCH_DIRS[@]}"; do - LAST_MODS["$dir"]=0 - LAST_COUNTS["$dir"]=$(find "$dir" -type f 2>/dev/null | wc -l) - blue "EYE | started watching the directory \033[94m$dir\033[0m" + for target in "${WATCH_TARGETS[@]}"; do + if [ -f "$target" ]; then + LAST_MODS["$target"]=0 + 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 "EYE | started watching \033[94m$target\033[0m" done - # # Основной цикл работы скрипта while true; do check_changes $pid if [ $? -eq 1 ]; then blue "EYE | rebuilding..." - eval $BUILD_CMD 2>/dev/null + $BUILD_CMD if [ $? -eq 0 ]; then blue "EYE | build successful. restarting..." kill_proc $pid