Jeffrey Ponsen
Jeffrey Ponsen

Reputation: 7

BASH | Retrieve variables from another file

I'm trying to create a bash script that can execute tasks based on a config file (create database backups). I'm trying to read variables like DB_NAME, DB_PASSWORD, DB_USER and DB_HOST from a .env file.

I have the following 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

So far, it's working. But I'm getting errors for variables that are not formatted correctly, and I can't change them.

Example .env file:

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&lLxu!-@/4-I9|nffhW]Hdu){7c}YH=CSDZ$bGL??tH7sU$y
SECURE_AUTH_KEY=2wj:zE^l?*/Xl~}4tLEu*&t&/1KqjkO@GY76~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`|G@+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{x@7GhI$ebTuqHj4%`8Rbxy)KtJd

The error I'm receiving is:

zgwb//.env: line 9: syntax error near unexpected token `('
zgwb//.env: line 9: `AUTH_KEY=Jg.Q(zUJL_Mva+Fg&lLxu!-@/4-I9|nffhW]Hdu){7c}YH=CSDZ$bGL??tH7sU$y'

Does anyone know how I could skip line 9 - 16 or so? I don't need them for my script.

Thanks in advance!

Upvotes: 0

Views: 360

Answers (2)

asio_guy
asio_guy

Reputation: 3767

how about, wrapping these in single quotes, is that allowed.

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&lLxu!-@/4-I9|nffhW]Hdu){7c}YH=CSDZ$bGL??tH7sU$y'
SECURE_AUTH_KEY='2wj:zE^l?*/Xl~}4tLEu*&t&/1KqjkO@GY76~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`|G@+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{x@7GhI$ebTuqHj4%`8Rbxy)KtJd'

and then sourcing the .env file

source ./t.env

echo $DB_NAME
echo $DB_USER
echo $DB_PASSWORD
echo $DB_HOST
echo $WP_ENV
echo $WP_HOME
echo $WP_SITEURL

echo $AUTH_KEY
echo $SECURE_AUTH_KEY
echo $LOGGED_IN_KEY
echo $NONCE_KEY
echo $AUTH_SALT
echo $SECURE_AUTH_SALT
echo $LOGGED_IN_SALT
echo $NONCE_SALT

Upvotes: 0

Kaushik Nayak
Kaushik Nayak

Reputation: 31648

You can exclude lines 9,16 using sed.So use source command like this

source <(sed '9,16d' "$dir"/.env)

Upvotes: 1

Related Questions