diff --git a/misc/build.func b/misc/build.func index b66a0786b..3ac18cd88 100644 --- a/misc/build.func +++ b/misc/build.func @@ -792,7 +792,7 @@ advanced_settings() { case "$SSH_KEY_MODE" in found) SEL=$(whiptail --backtitle "[dev] Proxmox VE Helper Scripts" --title "SELECT HOST KEYS" \ - --checklist "Select one or more keys to import:" 20 20 10 "${CHOICES[@]}" 3>&1 1>&2 2>&3) || exit_script + --checklist "Select one or more keys to import:" 20 140 10 "${CHOICES[@]}" 3>&1 1>&2 2>&3) || exit_script for tag in $SEL; do tag="${tag%\"}" tag="${tag#\"}" @@ -1203,26 +1203,29 @@ _sanitize_value() { # Map-Parser: read var_* from file into _VARS_IN associative array declare -A _VARS_IN -_load_vars_file_to_map() { +_load_vars_file() { local file="$1" - _VARS_IN=() - [[ -f "$file" ]] || return 0 - local line - while IFS= read -r line || [[ -n "$line" ]]; do + [ -f "$file" ] || return 0 + msg_info "Loading defaults from ${file}" + local line key val + while IFS= read -r line || [ -n "$line" ]; do line="${line#"${line%%[![:space:]]*}"}" line="${line%"${line##*[![:space:]]}"}" - [[ -z "$line" || "$line" == \#* ]] && continue - if [[ "$line" =~ ^([A-Za-z_][A-Za-z0-9_]*)=(.*)$ ]]; then - local k="${BASH_REMATCH[1]}" - local v="${BASH_REMATCH[2]}" - [[ "$k" == var_* ]] || continue - _is_whitelisted_key "$k" || continue - # strip Quotes - if [[ "$v" =~ ^\"(.*)\"$ ]]; then v="${BASH_REMATCH[1]}"; fi - if [[ "$v" =~ ^\'(.*)\'$ ]]; then v="${BASH_REMATCH[1]}"; fi - _VARS_IN["$k"]="$v" - fi + [ -z "$line" ] && continue + case "$line" in + \#*) continue ;; + esac + key=$(printf "%s" "$line" | cut -d= -f1) + val=$(printf "%s" "$line" | cut -d= -f2-) + case "$key" in + var_*) + if _is_whitelisted_key "$key"; then + [ -z "${!key+x}" ] && export "$key=$val" + fi + ;; + esac done <"$file" + msg_ok "Loaded ${file}" } # Diff function for two var_* files -> produces human-readable diff list for $1 (old) vs $2 (new)