キー/値のペアのファイルから環境変数を設定する 質問する

キー/値のペアのファイルから環境変数を設定する 質問する

TL;DR:テキスト ファイルからシェル環境にキー/値のペアのセットをエクスポートするにはどうすればよいですか?


記録のために、以下に質問の元のバージョンと例を示します。

私は特定のフォルダー内の 3 つの変数を持つファイルを解析する bash スクリプトを作成しています。これはそのうちの 1 つです:

MINIENTREGA_FECHALIMITE="2011-03-31"
MINIENTREGA_FICHEROS="informe.txt programa.c"
MINIENTREGA_DESTINO="./destino/entrega-prac1"

このファイルは./conf/prac1

私のスクリプトはminientrega.sh次のコードを使用してファイルを解析します。

cat ./conf/$1 | while read line; do
    export $line
done

minientrega.sh prac1しかし、コマンドラインで実行すると環境変数が設定されません

私も使ってみましたsource ./conf/$1が、同じ問題がまだ発生します

おそらく、これを行うには他の方法があり、スクリプトの引数として渡すファイルの環境変数を使用する必要があるだけです。

ベストアンサー1

これは役に立つかもしれません:

export $(cat .env | xargs) && rails c

.envこれを使用する理由は、Rails コンソールで何かをテストしたい場合です。

ガブリエルフ変数をローカルに保つための良い方法を思いつきました。これにより、プロジェクト間を移動するときに発生する可能性のある問題が解決されます。

env $(cat .env | xargs) rails

私はこれをテストしましたbash 3.2.51(1)-release


アップデート:

で始まる行を無視するには#、これを使用します(ピートのコメント):

export $(grep -v '^#' .env | xargs)

unsetファイル内で定義されているすべての変数が必要な場合は、次のようにします。

unset $(grep -v '^#' .env | sed -E 's/(.*)=.*/\1/' | xargs)

アップデート:

スペースを含む値も処理するには、次を使用します。

export $(grep -v '^#' .env | xargs -d '\n')

GNU システムの場合 -- または:

export $(grep -v '^#' .env | xargs -0)

BSD システムの場合。


からこの答え次のようにして OS を自動検出できます:

export-env.sh

#!/bin/sh

## Usage:
##   . ./export-env.sh ; $COMMAND
##   . ./export-env.sh ; echo ${MINIENTREGA_FECHALIMITE}

unamestr=$(uname)
if [ "$unamestr" = 'Linux' ]; then

  export $(grep -v '^#' .env | xargs -d '\n')

elif [ "$unamestr" = 'FreeBSD' ] || [ "$unamestr" = 'Darwin' ]; then

  export $(grep -v '^#' .env | xargs -0)

fi

おすすめ記事