теперь можно следить за конкретными файлами
parent
e636af2ab4
commit
dfdf3b0b35
48
eye.sh
48
eye.sh
|
@ -3,16 +3,15 @@ stty -echoctl # Отключает вывод управляющих симво
|
||||||
|
|
||||||
# НАСТРОЙКА СКРИПТА ТУТ ###########################################################
|
# НАСТРОЙКА СКРИПТА ТУТ ###########################################################
|
||||||
DURATION=1 # Задержка между проверками в секундах
|
DURATION=1 # Задержка между проверками в секундах
|
||||||
WATCH_DIRS=("empty" "folder1" "folder2") # Массив директорий для наблюдения
|
WATCH_TARGETS=("empty" "folder1" "folder2" "main.go" "no" "no.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() {
|
||||||
|
@ -39,19 +38,29 @@ kill_proc() {
|
||||||
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 "EYE | changes detected in \033[94m$target\033[0m"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -64,22 +73,25 @@ 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 "EYE | 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 "EYE | rebuilding..."
|
||||||
eval $BUILD_CMD 2>/dev/null
|
$BUILD_CMD
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
blue "EYE | build successful. restarting..."
|
blue "EYE | build successful. restarting..."
|
||||||
kill_proc $pid
|
kill_proc $pid
|
||||||
|
|
Loading…
Reference in New Issue