Pythonスクリプトに環境変数を提供し、次を使用してすぐに印刷できます。
$ FOO="bar" python -c "import os; print(os.environ.get('FOO'))"
bar
ただし、次の場合は同じことは当てはまりませんecho
。
$ FOO="bar" echo $FOO
$ echo $PWD
/home/nntin
最初の質問:なぜ印刷できないのですかbar
?
複数のコマンドを実行する場合、環境変数は最初のコマンドにのみ適用されます。
$ FOO="bar" python -c "import os; print(os.environ.get('FOO'))" && python -c "import os; print(os.environ.get('FOO'))"
bar
None
以下を使用して問題を解決できます。
$ FOO="bar" python -c "import os; print(os.environ.get('FOO'))" && FOO="bar" python -c "import os; print(os.environ.get('FOO'))"
bar
bar
しかし、多くの環境変数を渡すと扱いにくくなります。
2番目の質問:両方にどのように適用しますか?たとえば、2つのコマンドを順番に実行したいのですが、&&
コマンドラインで環境変数を2回ではなく1回だけ定義したいと思います。
同じコマンドラインで環境変数を設定することをお勧めします。環境変数は変更される可能性があるため、複数のコマンドを順番に実行するよりも1行のコマンドを実行する方が簡単です。むしろ1つの値だけを変更したいと思います。
PS:混乱したタイトルを理解してください。名前が何なのか、どこで見つけることができるのかわかりません。このようなコードを実行すると、環境変数は次のコマンドラインで使用できないため、永久に設定されません。ただし、コードは設定された環境変数のように動作します。タイトルと説明を自由に変更してみてください。
答え1
最初の例では、次のようになります。
コマンドラインを評価し、「bar」の値を環境変数「FOO」にロードし、Pythonコードを実行し、環境変数「FOO」を評価し、その内容を印刷します:「bar」
2番目の例:コマンドラインが評価され、「bar」値が「FOO」変数にロードされますが、echo $FOO
$ FOOと同時に評価されます。まだロードされていませんしたがって、空の文字列をエコーします。
3番目の例では、&&
2つのコマンドが分離されており、一時的な環境変数は保存されません。あなたは脱出できます。
FOO='bar' ( python -c "import os; print(os.environ.get('FOO'))" && FOO="bar" python -c "import os; print(os.environ.get('FOO'))" )