プログラムを実行するには、環境をファイルの変数に設定します。

プログラムを実行するには、環境をファイルの変数に設定します。

ファイルで定義されている環境変数のみを使用するプログラム(この場合はPython)を実行したいと思いますvars.env。たとえば、次のようになります。

FOO=bar
X=12

以下は、環境を印刷する簡単なPythonスクリプトです。

import os
print os.environ

実行すると、env -i python script.pyos.environは期待どおりに空になります。同様に、私が実行すると

$ env -i FOO=bar X=12 python env.py

わかりました。

env: {'X': '12', 'FOO': 'bar'}

しかし、私が望むのは、vars.envスクリプトを実行するときに私のファイルから環境をロードすることです。どうすればいいですか?

編集:私ができることの1つは、このenvファイルをキャットすることですが、env -i `cat vars.env` python env.py何とか入手できることを好みます。

ベストアンサー1

表示されるファイルが与えられたら、次のことができるはずです。

(set -f ; IFS='
' ; env - $(cat /path/to/file) /path/to/your/program
)

機能しない場合は、環境ファイルを最初にフォーマットする必要があるためです。例は次のとおりです。

(set -f ; IFS='
' ; env - $(cat) printenv 
) <<\ENV
variable1=value1
variable2=value2
variable3=value3 an$d s'om\e m"ore
ENV
###OUTPUT###
variable1=value1
variable2=value2
variable3=value3 an$d s'om\e m"ore

私は最初にシェルを通してこれを行うことができると思いました。しかし、おそらくプログラムを呼び出す前に自分の環境のいくつかを設定したかもしれません。ただし、少なくともパラメータの割り当てが正しいことを証明できます。

(set -f; IFS='
' ; env - $(cat) sh -c 'echo "$variable3"'
) <<\ENV
variable1=value1
variable2=value2
variable3=value3 an$d s'om\e m"ore
ENV
###OUTPUT###
value3 an$d s'om\e m"ore

ただし、ソースを取得するには、次のようにシェルを使用できます。

(echo '$1'; cat; echo '$2') <<\ENV |\
env - sh -s -- 'set -a' printenv
variable1=value1
variable2=value2
variable3='value3 an$d s'\''om\e m"ore'
ENV
###OUTPUT###
PWD=/home/mikeserv/test
SHLVL=1
variable1=value1
variable2=value2
variable3=value3 an$d s'om\e m"ore
_=/usr/bin/printenv

このアイテムを削除したことに注意してください。$IFS必須ではありませんが、ファイルの引用符について具体的に説明する必要がありました。ここでは本質的に.dotソーシングstdin(入力で読むもの|pipe)ですが、すべてのファイルを使用できます。私はset -a入力ファイルを読み取る前にオプションを設定するために使用します--allexport

bashこれは、およびをsh追加する '-'を使用した結果です。持っている方が良いです。また、複数のエクスポートを追加しないため、コマンドラインでパラメータを指定できます。$PWD$SHLVL$_dashdash-a

(cat; echo '$1') <<\ENV |\
env - dash -sa -- printenv 
variable1=value1
variable2=value2
variable3='value3 an$d s'\''om\e m"ore'
ENV
variable1=value1
variable2=value2
variable3=value3 an$d s'om\e m"ore
PWD=/home/mikeserv/test

だけ$PWD通過します。

おすすめ記事