mirror of
https://github.com/Lakr233/vphone-cli.git
synced 2026-04-05 13:09:06 +08:00
59 lines
1.2 KiB
Bash
Executable File
59 lines
1.2 KiB
Bash
Executable File
#!/bin/zsh
|
|
set -euo pipefail
|
|
unsetopt BG_NICE 2>/dev/null || true
|
|
|
|
PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
TARGET_DIR="${1:-${PROJECT_ROOT}/setup_logs/jb_patch_tests_20260306_113510}"
|
|
TAIL_LINES="${2:-20}"
|
|
SCAN_INTERVAL="${SCAN_INTERVAL:-1}"
|
|
|
|
if [[ ! -d "$TARGET_DIR" ]]; then
|
|
echo "error: directory not found: $TARGET_DIR" >&2
|
|
echo "usage: $0 [log_dir] [tail_lines]" >&2
|
|
exit 1
|
|
fi
|
|
|
|
typeset -A seen_files
|
|
typeset -a tail_pids
|
|
|
|
cleanup() {
|
|
local pid
|
|
for pid in "${tail_pids[@]-}"; do
|
|
kill "$pid" 2>/dev/null || true
|
|
done
|
|
}
|
|
trap cleanup EXIT INT TERM
|
|
|
|
start_tail_for_file() {
|
|
local file="$1"
|
|
local label="${file:t}"
|
|
|
|
[[ -n "${seen_files[$file]-}" ]] && return 0
|
|
seen_files["$file"]=1
|
|
|
|
echo "[watch] $file"
|
|
(
|
|
tail -n "$TAIL_LINES" -F -- "$file" 2>&1 \
|
|
| awk -v p="$label" '{ print "[" p "] " $0; fflush(); }'
|
|
) &
|
|
tail_pids+=("$!")
|
|
}
|
|
|
|
discover_files() {
|
|
local file
|
|
for file in "$TARGET_DIR"/**/*(.N); do
|
|
start_tail_for_file "$file"
|
|
done
|
|
}
|
|
|
|
echo "Following logs in: $TARGET_DIR"
|
|
echo "Tail lines per file: $TAIL_LINES"
|
|
echo "Scan interval: ${SCAN_INTERVAL}s"
|
|
|
|
discover_files
|
|
|
|
while true; do
|
|
sleep "$SCAN_INTERVAL"
|
|
discover_files
|
|
done
|