#!/bin/bash # 01_utils.sh - Grundlegende Hilfsfunktionen # === Logging Funktion === log_message() { local msg msg="$(date '+%Y-%m-%d %H:%M:%S') - $1" # Prüft, ob stdout ein Terminal ist, um "tee" nur bei interaktiver Ausführung zu nutzen if [ -t 1 ]; then echo "${msg}" | tee -a "$LOG_FILE" else echo "${msg}" >> "$LOG_FILE" fi } # === Hilfsfunktionen für Platzhalter === create_placeholder_file() { local fp="$1" local dc="$2" if [ ! -f "$fp" ]; then mkdir -p "$(dirname "$fp")" echo -e "$dc" > "$fp" log_message "Platzhalterdatei erstellt: $fp" fi } get_config_value_from_file() { local cf="$1" local k="$2" local dv="${3:-}" local v if [ ! -f "$cf" ]; then echo "$dv"; return; fi # Robuste Extraktion, die Kommentare, Leerzeichen und Anführungszeichen berücksichtigt v=$(grep -E "^\s*${k}\s*=" "$cf" | tail -n 1 | sed -e 's/\s*#.*//' -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | cut -d'=' -f2- | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' -e 's/^"//' -e 's/"$//' -e "s/^'//" -e "s/'$//") if [ -n "$v" ]; then echo "$v"; else echo "$dv"; fi } # === Template Rendering Funktion === render_template() { local template_path="$1" local output_path="$2" shift 2 local replacements=("$@") if [ ! -f "$template_path" ]; then log_message "FEHLER: Template-Datei nicht gefunden: ${template_path}" return 1 fi local template_content template_content=$(<"$template_path") for ((i=0; i<${#replacements[@]}; i+=2)); do local key_name="${replacements[i]}" local key="%%${key_name}%%" local value="${replacements[i+1]}" # Manuelle Ersetzung in einer Schleife, um mehrzeilige Inhalte und mehrfache Vorkommen zu unterstützen local new_content="" while [[ "$template_content" == *"$key"* ]]; do new_content+="${template_content%%$key*}${value}" template_content="${template_content#*$key}" done template_content="${new_content}${template_content}" done echo "$template_content" > "$output_path" return $? }