Files
vphone-cli/scripts/tail_jb_patch_logs.sh

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