2017-08-10 13 views
2

ここでは、bashでdotenvファイルをソースする方法がたくさんありますが、ダッシュ(これはデフォルトのDebianインストールのシェルです)を使って同じことを達成する方法がありますか?ダッシュでdotenv(.env)ファイルをソースする方法は?

ソリューションは、次のようになります。

$ some foo my-command-using-env-vars 

例えば

$ env $(cat .env) my-command-using-env-vars 

そして、解決策のようなスペースで複数行の値をサポートしていることが重要です:あなたの問題ではないことに思え

SPECIAL="foo#bar" 

答えて

2

:引用符内のハッシュのような

SSH_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nfoo\nbar\baz" 

と特殊文字あなたはdashを使用していますが、\nのエスケープをサポートしたいと考えています。

eval "$(echo $(cat .env))" my-command-using-env-vars 

dashechoに内蔵され、バックスラッシュがサポートされていても-eオプションを使用せずにエスケープしbashに理由とは異なります:以下dashでの作品とは\nエスケープをサポートしています。おそらく、両方のアプローチは、他のバックスラッシュをエスケープ(POSIXまたはGNUのどちらか)を処理することを

eval "$(env echo -e $(cat .env))" my-command-using-env-vars 

注:ことを提供両方bashdashで、次の作品は、非組み込みは、システムecho-eオプションをサポートしていますあなたとは違ったやり方で

いくつかのテクニカルノート:

$(cat .env) 

は、スペースにファイル.env内の任意の改行を変換し、Field Splittingを実行します。

"$(env echo -e ...)" 

はバックスラッシュはenv介しecho -eを呼び出すことに関係なく、現在のシェルのエスケープ拡張します。二重引用符はフィールド分割を無効にするので、改行は保持されます。

+0

解決に感謝します!好奇心のため、ちょうど上記のケースで他のバックスラッシュエスケープをどのように処理するのですか? –

+0

@BastianVenthur 'dash'と' bash'のマニュアルページを見て、組み込みコマンドを探します。 'env echo'については、' echo'マニュアルページを参照してください。 – nwellnhof

関連する問題