LoginSignup
5
2

More than 3 years have passed since last update.

Bashで=で区切られたファイルを変数の設定ファイルとして読み込む

Last updated at Posted at 2019-04-07

例えば下記のファイルがあるときに

.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

ということで、お手軽にバックアップが作成できます。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2