commit 317700cdecf0acc4a5239951f32ef8691ae7741a Author: serr Date: Fri Apr 11 21:52:15 2025 +0300 new diff --git a/README.md b/README.md new file mode 100644 index 0000000..c36fb09 --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +# 👁️ Eye - Universal Filesystem Watcher + +Lightweight directory monitor with automatic rebuild and restart functionality for any project type. + +## Key Features + +- 🕵️‍♂️ **Universal Monitoring**: Tracks changes directory +- 🔧 **Configurable Builds**: Works with any build system (Make, npm, go, etc.) +- 📦 **Zero Dependencies**: Pure Bash +- 🎨 **Clean Output**: Color-coded messages with EYE prefix + +## Quick Start + +1. Configure the script: +```bash +DURATION=5 # Delay between checks +WATCH_DIR="src/" # Directory to watch +BINARY_PATH="./app" # Output path +BUILD_CMD="make build" # Your custom build command +``` \ No newline at end of file diff --git a/eye.sh b/eye.sh new file mode 100755 index 0000000..f0a3677 --- /dev/null +++ b/eye.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +# НАСТРОЙКА СКРИПТА ТУТ ########################################################### +DURATION=5 # Задержка между проверками в секундах +WATCH_DIR=posts/ # Директория для наблюдения +BINARY_PATH="./hikan.ru" # Путь до бинарного файла +BUILD_CMD="go build -o $BINARY_PATH main.go" # Команда для сборки +################################################################################### + +# Нужное для работы скрипта (не менять) +LAST_MOD=0 # Для хранения времени последней модификации +LAST_COUNT=0 # Для хранения количества файлов +CLEANUP_DONE=0 # Была ли уже вызвана cleanup +PID="" # Для хранения PID запущенного процесса +# + +# Для вывода в синем цвете +blue() { + echo -e "\033[34m$1\033[0m" +} + +# Функция для очистки при завершении работы скрипта +cleanup() { + [ $CLEANUP_DONE -eq 1 ] && exit 0 + CLEANUP_DONE=1 + blue "EYE | cleanup..." + kill_previous + rm -f $BINARY_PATH + blue "EYE | see you later!" + exit 0 +} +# Ловушка для сигналов завершения +trap cleanup SIGINT SIGTERM SIGHUP SIGQUIT EXIT +# + +# Функция для убийства предыдущего процесса +kill_previous() { + if [ -n "$PID" ] && kill -0 $PID 2>/dev/null; then # 2>/dev/null глушит ненужные сообщения в stderr + kill $PID + blue "EYE | killed previous process (PID: $PID)" + fi +} +# + +# Функция для подсчета файлов в директории +count_files() { + find "$WATCH_DIR" -type f | wc -l +} +# + +LAST_COUNT=$(count_files) +[ $LAST_COUNT = 0 ] && blue "EYE | empty dir" + +while true; do + CURRENT_MOD=$(find "$WATCH_DIR" -type f -exec stat -c %Y {} \; | sort -nr | head -1) # Время последнего изменения в папке WATCH_DIR + CURRENT_COUNT=$(count_files) + if { [ -n "$CURRENT_MOD" ] && [ "$CURRENT_MOD" -gt "$LAST_MOD" ]; } || [ "$CURRENT_COUNT" -ne "$LAST_COUNT" ]; then + LAST_MOD=$CURRENT_MOD + LAST_COUNT=$CURRENT_COUNT + blue "EYE | detected changes. rebuilding..." + $BUILD_CMD 2>/dev/null # Сборка + if [ $? -eq 0 ]; then # $? - код возврата + blue "EYE | build successful. restarting..." + kill_previous # Убивает предыдущий процесс + $BINARY_PATH & # & — Запускает процесс в фоновом режиме, чтобы eye не зависал + PID=$! # $! - спец. переменная в bash, содержащая pid последнего запущенного фонового процесса + blue "EYE | started new process (PID: $PID)" + else + blue "EYE | build failed" + fi + fi + + sleep $DURATION +done \ No newline at end of file