優先順位
- 環境変数
-
.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