1
0

fix: harden checklist selection parsing and clarify -f help text

This commit is contained in:
2026-04-26 00:33:27 +02:00
parent f9af0f4823
commit 46f42c8893
3 changed files with 35 additions and 8 deletions
+31 -5
View File
@@ -4,7 +4,7 @@ showHelp() {
echo "netupgrade [--help] [-f] [-y] [configfilename]"
echo ""
echo " --help Show this help message"
echo " -f Select all nodes"
echo " -f Preselect all nodes in the checklist"
echo " -y No confirmation for supported package managers"
echo " configfilename Path to a cfg file"
}
@@ -64,6 +64,20 @@ parseNode() {
IFS=';' read -r -a NODE_FIELDS_REF <<< "${NODE_VALUE}"
}
parseSelection() {
local SELECTION_RAW="${1}"
local -n SELECTION_REF="${2}"
local ITEM_INDEX=0
SELECTION_REF=()
read -r -a SELECTION_REF <<< "${SELECTION_RAW}"
for ITEM_INDEX in "${!SELECTION_REF[@]}"; do
SELECTION_REF[ITEM_INDEX]="${SELECTION_REF[ITEM_INDEX]%\"}"
SELECTION_REF[ITEM_INDEX]="${SELECTION_REF[ITEM_INDEX]#\"}"
done
}
runSSH() {
local HOST="${1}"
shift
@@ -72,11 +86,18 @@ runSSH() {
selectNodes(){
local -a OPTIONS=()
local -a SELECTED_ITEMS=()
local -i INDEX=1
local -i I=0
local -a FIELDS=()
local DESC=""
local FIELD=""
local SEL=""
local DEFAULT_STATE="OFF"
if [ "${FULL}" -eq 1 ]; then
DEFAULT_STATE="ON"
fi
for NODE in "${NODES[@]}"; do
FIELDS=()
@@ -90,7 +111,7 @@ selectNodes(){
DESC="${DESC}|${FIELD%%:*}"
fi
done
OPTIONS+=("${INDEX}:${FIELDS[0]}" "${FIELDS[1]} [${DESC}]" "${FULL}")
OPTIONS+=("${INDEX}:${FIELDS[0]}" "${FIELDS[1]} [${DESC}]" "${DEFAULT_STATE}")
INDEX+=1
done
if ! SEL=$(whiptail --title "NetUpgrade" --checklist "" 0 0 0 \
@@ -98,7 +119,12 @@ selectNodes(){
3>&1 1>&2 2>&3); then
exit 0
fi
if [ ${#SEL} == 0 ]; then
if [ -z "${SEL}" ]; then
exit 0
fi
parseSelection "${SEL}" SELECTED_ITEMS
if [ ${#SELECTED_ITEMS[@]} -eq 0 ]; then
exit 0
fi
@@ -108,12 +134,12 @@ selectNodes(){
touch "${LOGFILENAME}"
local RESULT="\n"
for ITM in ${SEL}; do
for ITM in "${SELECTED_ITEMS[@]}"; do
INDEX=1
for NODE in "${NODES[@]}"; do
FIELDS=()
parseNode "${NODE}" FIELDS
if [ "${ITM}" = "\"${INDEX}:${FIELDS[0]}\"" ]; then
if [ "${ITM}" = "${INDEX}:${FIELDS[0]}" ]; then
for ((I = 2; I < ${#FIELDS[@]}; ++I)); do
if runCmd "${FIELDS[0]}" "${FIELDS[1]}" "${FIELDS[I]}"; then
RESULT+="Ok: ${FIELDS[1]} @ ${FIELDS[0]} : ${FIELDS[I]}\n"