Improve script robustness and portability for logging, terminal execution, and uninstallation workflows.

This commit is contained in:
2025-09-20 08:53:18 +02:00
parent 608a6a371f
commit c46a1da405
2 changed files with 68 additions and 15 deletions

View File

@@ -7,8 +7,28 @@ LOG_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/backtunnel"
[[ -d "$LOG_DIR" ]] || mkdir -p "$LOG_DIR"
LOG_FILE="${LOG_DIR}/servicemenu.$(date +%Y%m%d-%H%M%S).log"
# Simple rotation: keep the last 10 files
ls -1t "$LOG_DIR"/servicemenu.*.log 2>/dev/null | awk 'NR>10{print}' | xargs -r rm -f
# Simple rotation: keep the last 10 files (portable, avoids SC2207 and xargs -r)
shopt -s nullglob
logs=( "$LOG_DIR"/servicemenu.*.log )
if (( ${#logs[@]} > 10 )); then
pairs=()
for f in "${logs[@]}"; do
# Try GNU stat, then BSD stat; fall back to 0 if neither works
if mtime=$(stat -c %Y -- "$f" 2>/dev/null); then
:
elif mtime=$(stat -f %m -- "$f" 2>/dev/null); then
:
else
mtime=0
fi
pairs+=( "$mtime"$'\t'"$f" )
done
IFS=$'\n' read -r -d '' -a sorted < <(printf '%s\n' "${pairs[@]}" | sort -rn -k1,1 | cut -f2-; printf '\0')
for (( i=10; i<${#sorted[@]}; i++ )); do
rm -f -- "${sorted[i]}"
done
fi
shopt -u nullglob
cmd=( "$@" )
{
@@ -34,13 +54,24 @@ cmd=( "$@" )
term="$(detect_term)"
echo "Chosen terminal: ${term:-<none>}"; echo
# Prebuild a shell-escaped command for bash -lc cases (preserves args)
shell_cmd=""
if (( ${#cmd[@]} )); then
printf -v shell_cmd '%q' "${cmd[0]}"
if (( ${#cmd[@]} > 1 )); then
for a in "${cmd[@]:1}"; do
printf -v shell_cmd '%s %q' "$shell_cmd" "$a"
done
fi
fi
# Run command in terminal (use hold/noclose if supported)
case "$term" in
konsole) exec konsole --noclose -e "${cmd[@]}" ;;
kitty) exec kitty -e "${cmd[@]}" ;;
alacritty) exec alacritty -e "${cmd[@]}" ;;
gnome-terminal) exec gnome-terminal -- bash -lc "exec \"${cmd[0]}\" ${cmd[@]:1}" ;;
kgx) exec kgx -- bash -lc "exec \"${cmd[0]}\" ${cmd[@]:1}" ;; # GNOME Console
gnome-terminal) exec gnome-terminal -- bash -lc "exec $shell_cmd" ;;
kgx) exec kgx -- bash -lc "exec $shell_cmd" ;; # GNOME Console
tilix) exec tilix -e "${cmd[@]}" ;;
xfce4-terminal) exec xfce4-terminal -e "${cmd[@]}" ;;
xterm) exec xterm -hold -e "${cmd[@]}" ;;