Files
einkaufsapp/tools/check-env.sh

53 lines
1.5 KiB
Bash
Executable File

#!/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