From 9250af0f0bac4fd31fc50cd82bf41e87af71bcb6 Mon Sep 17 00:00:00 2001 From: Alexandre <44178713+alexbelgium@users.noreply.github.com> Date: Sun, 6 Jul 2025 16:25:01 +0200 Subject: [PATCH] Update 01-config_yaml.sh --- .templates/01-config_yaml.sh | 40 +++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/.templates/01-config_yaml.sh b/.templates/01-config_yaml.sh index 6be190683..85ea26477 100644 --- a/.templates/01-config_yaml.sh +++ b/.templates/01-config_yaml.sh @@ -134,23 +134,27 @@ fi # Export all yaml entries as env variables # Helper function -function parse_yaml { - local prefix=$2 || local prefix="" - local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @ | tr @ '\034') - sed -ne "s|^\($s\):|\1|" \ - -e "s| #.*$||g" \ - -e "s|#.*$||g" \ - -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \ - -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 | - awk -F$fs '{ -indent = length($1)/2; -vname[indent] = $2; -for (i in vname) {if (i > indent) {delete vname[i]}} -if (length($3) > 0) { -vn=""; for (i=0; i "$output_file" + + # Process each line to escape special characters and format as needed + while IFS= read -r line; do + # Skip lines that are empty or only contain whitespace + [[ -z "$line" ]] && continue + + # Replace the first occurrence of ": " with "=" + line=${line/: /=} + + # Escape special characters not within single quotes + line=$(sed -E "s/([^'])([][\$\`\"\\!&;|<>])/\1\\\\\\2/g" <<< "$line") + + # Write to output file + echo "$line" >> "$output_file" + done < "$input_file" } # Get list of parameters in a file @@ -163,8 +167,6 @@ SECRETSFILE="/config/secrets.yaml" if [ -f "$SECRETSFILE" ]; then SECRETSFILE="/homeassistant/secrets.yaml"; fi while IFS= read -r line; do - # Clean output - line="${line//[\"\']/}" # Check if secret if [[ "${line}" == *'!secret '* ]]; then echo "secret detected"