様々なやんごとなき事情によって、手元でささっと source .env
もしくは env $(cat .env) foobar
したくなる時はありませんか。
私はあります。
しかし、以下の記事にて指摘されている通り、 .env
ファイルのシンタックスは、Bash や Zsh などの Bourne Shell 互換のシェルにおける変数の宣言のシンタックスとは異なります。
実際、上記の記事で挙げられているものを source .env
にて読み込もうとすると以下のような結果となります。
$ cat .envincluding_space=hello worldpush_to_background=hello &pipe_to=hello | worldredirect_to=hello > worldend_statement=hello; worldcomment_tailing=hello # world$ source .env.env:1: command not found: world.env:2: parse error near `&'
しかし、それでもなお様々なやんごとなき事情によって手元でささっと .env の中身を環境変数として読み込みたい時がきっとあるかもしれません。
私は https://github.com/joho/godotenv を利用することにしました。 joho/godotenv は Ruby dotenv プロジェクトの移植実装であり、現在も継続してメンテナンスされている様子が伺えます。 試してみましょう。
$ go get -u github.com/joho/godotenv/cmd/godotenv$ godotenv -f .env zsh$ env | grep hellocomment_tailing=helloincluding_space=hello worldpush_to_background=hello &pipe_to=hello | worldredirect_to=hello > worldend_statement=hello; world
無事に読み込むことができました。良かったね!
実は oh-my-zsh の dotenv plugin でも source
で .env
file を読み込んでいるため、上記のファイルを正しく読み込むことができません。
コントリビューションチャンスかなと思ったのですが、この次にご紹介する gist を見て諦めました。
https://github.com/ohmyzsh/ohmyzsh/blob/master/plugins/dotenv/dotenv.plugin.zsh#L47
.env
ファイルをダイレクトに bash へ読み込ませることについて、以下の gist に先人たちの苦労が記されています。
以下の議論をお読みいただければ、いかにこれが厳しい道程であるかが伝わるかと思われます。
多分 zsh でも同じように辛いと思います。
https://gist.github.com/judy2k/7656bfe3b322d669ef75364a46327836