53 lines
1.5 KiB
Bash
53 lines
1.5 KiB
Bash
#!/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
|