mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-28 05:12:33 +00:00
64 lines
1.6 KiB
Bash
Executable File
64 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# logs.sh [list|last|<file>] [--head N | --tail N]
|
|
|
|
set -euo pipefail
|
|
here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
# shellcheck source=lib.sh
|
|
source "$here/lib.sh"
|
|
|
|
target="${1:-list}"
|
|
shift || true
|
|
mode=""
|
|
lines="200"
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--head) mode="head"; lines="${2:?--head requires N}"; shift 2 ;;
|
|
--head=*) mode="head"; lines="${1#*=}"; shift ;;
|
|
--tail) mode="tail"; lines="${2:?--tail requires N}"; shift 2 ;;
|
|
--tail=*) mode="tail"; lines="${1#*=}"; shift ;;
|
|
*) echo "[debug:logs] unknown arg: $1" >&2; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
log_dir="$(debug_log_dir)"
|
|
|
|
if [ "$target" = "list" ]; then
|
|
ls -1t "$log_dir" 2>/dev/null | head -n 50
|
|
exit 0
|
|
fi
|
|
|
|
resolve_log() {
|
|
local t="$1"
|
|
if [ "$t" = "last" ]; then
|
|
ls -1t "$log_dir" 2>/dev/null | head -n 1 | awk -v d="$log_dir" '{print d "/" $0}'
|
|
return
|
|
fi
|
|
if [ -f "$t" ]; then echo "$t"; return; fi
|
|
if [ -f "$log_dir/$t" ]; then echo "$log_dir/$t"; return; fi
|
|
# Prefix match
|
|
local match
|
|
match=$(ls -1t "$log_dir" 2>/dev/null | grep -F "$t" | head -n 1 || true)
|
|
if [ -n "$match" ]; then echo "$log_dir/$match"; return; fi
|
|
echo ""
|
|
}
|
|
|
|
file="$(resolve_log "$target")"
|
|
if [ -z "$file" ] || [ ! -f "$file" ]; then
|
|
echo "[debug:logs] no log matching: $target" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "[debug:logs] $file"
|
|
case "$mode" in
|
|
head) head -n "$lines" "$file" ;;
|
|
tail) tail -n "$lines" "$file" ;;
|
|
"")
|
|
if [ "$(wc -l <"$file")" -gt 400 ]; then
|
|
echo "--- log is long; showing last 400 lines (use --head/--tail to override) ---"
|
|
tail -n 400 "$file"
|
|
else
|
|
cat "$file"
|
|
fi
|
|
;;
|
|
esac
|