Fix prompt_yn silently discarding its default on empty input

Confirmed live: pressing Enter on any "(y/n): y"-style prompt set the
variable to an empty string instead of the stated default, since prompt_yn
had no ${response:-$default} fallback (prompt_text already had one). Every
downstream [[ "$VAR" =~ ^[Yy]$ ]] check treated "just press Enter" as no.
Also shows the default value in the prompt text itself for both helpers,
since neither displayed it before.
This commit is contained in:
Claude
2026-07-23 16:14:19 +00:00
parent 4c0326ca5f
commit 526cb4a623
+12 -5
View File
@@ -413,21 +413,28 @@ validate_password() {
# Prompt yes/no, honoring unattended. prompt_yn "Question?" "default" VARNAME
prompt_yn() {
local question="$1" default="$2" varname="$3" response
local question="$1" default="$2" varname="$3" response hint=""
if [ "$UNATTENDED" = true ]; then
eval "$varname='$default'"; echo "$question [auto: $default]"; return
fi
read -p "$question " response
eval "$varname='$response'"
# Confirmed live: this used to have no fallback to $default at all here —
# pressing Enter on a stated "(y/n): y" default silently set the variable
# to an EMPTY string, not "y", so every downstream `[[ "$VAR" =~ ^[Yy]$ ]]`
# check treated "just press Enter to accept the default" as a no. Every
# prompt_yn call in every service was affected.
[ -n "$default" ] && hint=" [$default]"
read -p "${question}${hint} " response
eval "$varname='${response:-$default}'"
}
# Prompt text, honoring unattended. prompt_text "Question?" "default" VARNAME
prompt_text() {
local question="$1" default="$2" varname="$3" response
local question="$1" default="$2" varname="$3" response hint=""
if [ "$UNATTENDED" = true ]; then
eval "$varname='$default'"; echo "$question [auto: $default]"; return
fi
read -p "$question " response
[ -n "$default" ] && hint=" [$default]"
read -p "${question}${hint} " response
eval "$varname='${response:-$default}'"
}