例えば下記のファイルがあるときに
.env
DB_CONNECTION=mysql
DB_HOST=mysql.test
DB_PORT=3306
DB_DATABASE=mysql
DB_USERNAME=root
DB_PASSWORD=example
echo $DB_HOST # mysql.test と出力させたい
をさせたい。
シェルスクリプト
.
でファイルを読み込ませる事ができる。参考
hoge.sh
#!/usr/bin/env bash
. .env
echo $DB_HOST # mysql.testが出力される
コマンドライン
source
で読み込ませることができる。
$ source .env
$ echo $DB_HOST # mysql.test が出力される
何をさせたかったか
Laravelの環境ファイル.env
を読み込んで、DBのバックアップ(ダンプ)を取得したかったです。
.env
# 抜粋です
DB_CONNECTION=mysql
DB_HOST=shiba_office.test
DB_PORT=3306
DB_DATABASE=shiba_office
DB_USERNAME=root
DB_PASSWORD=example
backup.sh
#!/usr/bin/env bash
# .envファイルを元にDBのバックアップを作成する
set -xe # 環境変数の展開しつつコマンドの表示、エラー時に表示 => 環境変数のパスワードがttyに表示されるので注意
# 相対呼び出しに対応するためこのスクリプトファイルが置いている場所に移動
# cd -- "$(dirname "$BASH_SOURCE")"
# cd ../
# そこからLaravelのルートに移動
# cd lara_app
# .envファイルの読み出し
. .env
NOW=$(date +%Y%m%d%H%M%S) # 現在時刻を取得
# 圧縮あり ファイル名は backup_dbname_20190407080030.sql.gz といった名前になる
mysqldump -h${DB_HOST} -u${DB_USERNAME} -p${DB_PASSWORD} ${DB_DATABASE} \
| gzip - > backup_${DB_DATABASE}_${NOW}.sql.gz
# 圧縮なし ファイル名は backup_dbname_20190407080030.sql といった名前になる
# mysqldump -h${DB_HOST} -u${DB_USERNAME} -p${DB_PASSWORD} ${DB_DATABASE} \
# > backup_${DB_DATABASE}_${NOW}.sql
ということで、お手軽にバックアップが作成できます。