#!/usr/bin/env bash # Sucht doppelte Variablen in der .env. # # ./tools/check-env.sh [.env] # # Hintergrund: Docker Compose nimmt bei mehrfach definierten Variablen # die LETZTE. Eine vergessene leere Vorlagenzeile unterhalb des # eingefügten Werts schaltet die betroffene Funktion damit still wieder # ab - ohne Fehlermeldung, nur mit einem Verhalten, das niemand erklären # kann. set -euo pipefail FILE="${1:-.env}" [ -f "$FILE" ] || { echo "$FILE nicht gefunden." >&2; exit 2; } problems=0 # Doppelte Schlüssel dupes=$(grep -E '^[A-Za-z_][A-Za-z0-9_]*=' "$FILE" \ | cut -d= -f1 | sort | uniq -d || true) if [ -n "$dupes" ]; then echo "Mehrfach definiert (Docker Compose nimmt jeweils die letzte Zeile):" while read -r key; do [ -z "$key" ] && continue echo " $key" grep -n "^$key=" "$FILE" | sed 's/^/ Zeile /' problems=$((problems + 1)) done <<< "$dupes" fi # Leerzeichen vor dem Gleichheitszeichen - solche Zeilen ignoriert Compose spaced=$(grep -nE '^[A-Za-z_][A-Za-z0-9_]* +=' "$FILE" || true) if [ -n "$spaced" ]; then echo "Leerzeichen vor dem '=' (wird von Docker Compose ignoriert):" echo "$spaced" | sed 's/^/ Zeile /' problems=$((problems + 1)) fi # Anführungszeichen - die landen wörtlich im Wert quoted=$(grep -nE '^[A-Za-z_][A-Za-z0-9_]*="' "$FILE" || true) if [ -n "$quoted" ]; then echo "Anführungszeichen im Wert (Compose übernimmt sie wörtlich):" echo "$quoted" | sed 's/^/ Zeile /' problems=$((problems + 1)) fi if [ "$problems" -eq 0 ]; then echo "$FILE: keine Auffälligkeiten" else exit 1 fi