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