From 26b1adfbcc48be555776d7853e6fc6de7ac090a0 Mon Sep 17 00:00:00 2001 From: Claudiu Hojda Date: Sat, 23 May 2026 10:59:17 +0300 Subject: [PATCH] kernel-clean: support range syntax in selection prompt (#14656) Allow selecting kernels with ranges (e.g. 1-5) and mixed expressions (e.g. 1,3-5,7) in addition to the existing comma-separated syntax. --- tools/pve/kernel-clean.sh | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/tools/pve/kernel-clean.sh b/tools/pve/kernel-clean.sh index a9af89219..f3a22df05 100644 --- a/tools/pve/kernel-clean.sh +++ b/tools/pve/kernel-clean.sh @@ -41,13 +41,23 @@ echo -e "${GN}Currently running kernel: ${current_kernel}${CL}" echo -e "${YW}Available kernels for removal:${CL}" echo "$available_kernels" | nl -w 2 -s '. ' -echo -e "\n${YW}Select kernels to remove (comma-separated, e.g., 1,2):${CL}" +echo -e "\n${YW}Select kernels to remove (e.g. 1,3 or 1-5 or 1-3,7):${CL}" read -r selected -# Parse selection -IFS=',' read -r -a selected_indices <<<"$selected" -kernels_to_remove=() +# Parse selection: supports single indices, ranges (e.g., 1-5), and combinations (e.g., 1,3-5,7) +selected_indices=() +IFS=',' read -r -a tokens <<<"$selected" +for token in "${tokens[@]}"; do + if [[ "$token" =~ ^([0-9]+)-([0-9]+)$ ]]; then + for ((i = BASH_REMATCH[1]; i <= BASH_REMATCH[2]; i++)); do + selected_indices+=("$i") + done + else + selected_indices+=("$token") + fi +done +kernels_to_remove=() for index in "${selected_indices[@]}"; do kernel=$(echo "$available_kernels" | sed -n "${index}p") if [ -n "$kernel" ]; then