Improve script robustness and portability for logging, terminal execution, and uninstallation workflows.
This commit is contained in:
@@ -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[@]}" ;;
|
||||
|
||||
Reference in New Issue
Block a user