Mac 10.11.6では、GNU bashバージョン3.2.57(1)を使用-リリース(x86_64-apple-darwin15)set +a
コマンドが機能していないようです:
script.py
#!/usr/bin/python
import os
print("VAR0 is:", os.environ.get("VAR0")
コマンド:
$ VAR0=abc
$ ./script.py
('VAR0 is:', None) # expected
$ set -a
$ VAR0=abc
$ ./script.py
('VAR0 is:', 'abc') # expected, VAR0 has been exported to the environment and script.py has access to it
$ set +a
$ VAR0=def
$ ./script.py
('VAR0 is:', 'def') # <= unexpected
承認された回答:
持ち帰り:はい、set +a
set -a
の設定を解除します しかし、そのために変数がエクスポート解除されることはありません。次に、各変数をエクスポート解除または設定解除する必要があります。
オプションallexport
(set -a
と同じです )新規の自動エクスポートを可能にします および変更 変数。 set -a
をアクティブ化する前に存在する変数 オプションはエクスポートされません。
テスト前の2つのポイント:
-
set -a
の条件shopt -po allexport
で印刷できます 。
そしてshopt -os allexport
で変更できます およびshopt -ou allexport
。$ shopt -po allexport set +o allexport $ set -a $ shopt -po allexport set -o allexport $ set +a $ shopt -po allexport set +o allexport
-
環境変数をテストするためのシェルの方法は、
environment
の出力を調べることです。 コマンド、実際にはgrep
それ$ env | grep PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Pythonの外部プログラムは必要ありません(最初の呼び出しでコンパイルする必要があります)。それがあなたを幸せにするなら、あなたはまだそれを使うかもしれません、しかしそれの本当の必要はありません。
オプションが設定されていない場合(set +a
)。 新しい 変数はありません エクスポートされます。
$ unset VAR0
$ VAR0=abc
$ env | grep VAR0
# nothing is printed.
または、それでもプログラムが必要な場合:
$ ./envtest.py
VAR0 is: None
-a
の場合 オプションが変更された場合、変数は変更されるまでエクスポートされません:
$ set -a
$ shopt -po allexport
set -o allexport
$ env | grep VAR0
$ ./envtest.py
VAR0 is: None
変数が変更された場合:
$ VAR0=bcd
$ env | grep VAR0
VAR0=bcd
$ ./envtest.py
VAR0 is: bcd
ただし、set +a
の場合、変数は環境に残ります。 適用される:
$ set +a
$ env | grep VAR0
VAR0=bcd
$ ./envtest.py
VAR0 is: bcd
varが変更されても、それは環境の一部です:
$ VAR0=xyz
$ env | grep VAR0
VAR0=xyz
$ ./envtest.py
VAR0 is: xyz
エクスポートが解除されるまで(エクスポート属性を削除):
$ declare +x VAR0
または、単にunset
$ env | grep VAR0
VAR0=xyz
$ unset VAR0
$ env | grep VAR0
いいえ、空の値を割り当てることは同じではありません:
$ VAR0=''
$ env | grep VAR0
VAR0=
あなたのプログラムがそれを明確に示していないもの:
$ ./envtest.py
VAR0 is: