new
commit
317700cdec
|
@ -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
|
||||||
|
```
|
|
@ -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
|
Loading…
Reference in New Issue