LoginSignup
50
26

More than 5 years have passed since last update.

dotenv を Bash と Zsh でやる

Last updated at Posted at 2018-01-18

優先順位

  1. 環境変数
  2. .env 変数

vlucas/phpdotenv のデフォルトの挙動にそのまま従う感じのアレ。アレをBashやZshで書きたくなった。

実装2パターン

どちらもBashとZshで差異なく動作します。プロセス置換機能さえあればOK。

環境変数に無い.env変数をシェル変数としてインポートする

現在のプロセスでしか参照しない場合はシェル変数で十分。

実装
eval "$(cat .env <(echo) <(declare -x))"
動作確認
#!/bin/bash

cd /tmp

cat << EOD > .env
APP_ENV=local
APP_DEBUG=true
EOD

export APP_ENV=staging

eval "$(cat .env <(echo) <(declare -x))"

echo $APP_ENV             # staging
echo $APP_DEBUG           # true
bash -c 'echo $APP_ENV'   # staging
bash -c 'echo $APP_DEBUG' # 

環境変数に無い.env変数を環境変数としてインポートする

当該シェルとは無関係な子プロセスに変数を引き継ぎたい場合はこちらで。

実装
set -a; eval "$(cat .env <(echo) <(declare -x))"; set +a;
動作確認
#!/bin/bash

cd /tmp

cat << EOD > .env
APP_ENV=local
APP_DEBUG=true
EOD

export APP_ENV=staging

set -a; eval "$(cat .env <(echo) <(declare -x))"; set +a;

echo $APP_ENV             # staging
echo $APP_DEBUG           # true
bash -c 'echo $APP_ENV'   # staging
bash -c 'echo $APP_DEBUG' # true
50
26
2

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
50
26