Erste Produktivversion
This commit is contained in:
52
tools/check-env.sh
Normal file
52
tools/check-env.sh
Normal file
@@ -0,0 +1,52 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user