bashでdotenvファイルを環境変数に読み出す
.env
みたいな環境変数設定ファイルを読み込んでから指定プログラムをexecするみたいなラッパーが欲しくなる事あると思います。
Goだとgithub.com/joho/godotenvとかあるけど、Goでやるほどでもないよねーという感じだったので、bashで書くなどした。
#!/bin/bash
set -e
if [[ "$#" = "0" ]]; then
echo "usage: env-wrap.sh cmd [args...]" >&2
exit 1
fi
# declare -x を引数無しで呼び出して、現状の環境変数をexportableな形式で書き出す
orig_env="$(declare -x)"
envfile=.env
# allexportは`KEY=VALUE`をシェル変数じゃなくて、環境変数としてexportする危険なオプション
set -o allexport
source $envfile
set +o allexport
# 元の環境変数を優先するために書き戻す
eval "$orig_env"
exec "$@"
declare -x
や set -o allexport
とかがポイントです。
bashやzshでしか動かないので、それ以外の環境で動かさないようにお気をつけください。