Ich versuche, ein Bash-Skript zu erstellen, das Aufgaben basierend auf einer Konfigurationsdatei ausführen kann (Erstellen von Datenbanksicherungen). Ich versuche Variablen wie DB_NAME, DB_PASSWORD, DB_USER und DB_HOST aus einer .env
Datei zu lesen.BASH | Abrufen von Variablen aus einer anderen Datei
Ich habe den folgenden Code:
#!/bin/bash
for dir in */ ; do
echo "Check for environment file in $dir";
if [ -e "$dir/.env" ]; then
source $dir/.env
echo "Database: $DB_NAME"
else
echo "Environment file not found, skipping.."
fi
echo "---"
done
Bisher es funktioniert. Aber ich bekomme Fehler für Variablen, die nicht korrekt formatiert sind, und ich kann sie nicht ändern.
Beispiel .env
Datei:
DB_NAME=zgwb
DB_USER=root
DB_PASSWORD=
DB_HOST=localhost
WP_ENV=development
WP_HOME=http://zgwb.app
WP_SITEURL=${WP_HOME}/wp
AUTH_KEY=Jg.Q(zUJL_Mva+Fg&[email protected]/4-I9|nffhW]Hdu){7c}YH=CSDZ$bGL??tH7sU$y
SECURE_AUTH_KEY=2wj:zE^l?*/Xl~}4tLEu*&t&/[email protected]~K*<p%LB4x,{9ygOcAr|>1p/#48g
LOGGED_IN_KEY=pD#e%R=+tDt]1m9xL^@Nc~N+R3~quYwJ>:O3NHV7!%Sz>oWA`u$,ko{1*$(?ybIn
NONCE_KEY=?]&Mrzg~aYo~$!p3=`XdeI5_iK-GMqTKax[rW`gXPvMp,1)}RD~W#UE_+moDC8%D
AUTH_SALT=,YUPP1a+]Mg&b}2TqRc`|[email protected]+T<v_W:mPU6=/v=>gE;[G_M}?+>~`v0-%OcX/|9MU
SECURE_AUTH_SALT=DERZxF51AP;i>-h(8/8`XQ5|Tq:S}Jaq%R^?]I0l]Vt#CBR?yn~[3U[k!(2Xp2%`
LOGGED_IN_SALT=hQ~+}Qc!|wJBY<A]ap64!P%IvE=L.6Cbkr,/8;77sd:&+w0=MuWj!yR,3JEXd6Zo
NONCE_SALT={SlTN(n5[jI$G:5(qp>>OG-e&l1)*n.35gjg{[email protected]$ebTuqHj4%`8Rbxy)KtJd
Der Fehler Ich erhalte ist:
zgwb//.env: line 9: syntax error near unexpected token `('
zgwb//.env: line 9: `AUTH_KEY=Jg.Q(zUJL_Mva+Fg&[email protected]/4-I9|nffhW]Hdu){7c}YH=CSDZ$bGL??tH7sU$y'
Wer weiß, wie ich die Leitung 9 überspringen könnte - 16 oder so? Ich brauche sie nicht für mein Skript.
Vielen Dank im Voraus!
Wenn ich diese Regel verwenden, erhalte ich keine gesetzt Variablen. Die Variable DB_NAME aus meinem Beispiel funktioniert nicht mehr. Die Fehler sind verschwunden. –
Sind Sie sicher, dass Ihre Variablen nicht zwischen den Zeilen 9 und 16 liegen? –
Ja. Ich benutze die genaue Datei wie oben erwähnt. Gibt es eine Möglichkeit, wie ich die Ausgabe der Quelle auf den Bildschirm ausgeben kann? Der Code, den ich verwende ist: source <(sed '9,16d' "$ dir" /. Env) echo "Datenbank: $ DB_NAME" –