52

私はubuntu 13.04、bash、python2.7.4を使用しています

インタープリターは、私が設定した変数を認識しません。

次に例を示します。

$ echo $A
5
$ python -c 'import os; print os.getenv( "A" )'
None
$ python -c 'import os; print os.environ[ "A" ]'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
    raise KeyError(key)
KeyError: 'A'

しかし、すべてが変数でうまく機能しPATHます:

$ echo $PATH 
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ python -c 'import os; print os.getenv("PATH")'
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

そして、次の変更に気づきますPATH

$ PATH="/home/alex/tests/:$PATH"
$ echo $PATH 
/home/alex/tests/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ python -c 'import os; print os.getenv("PATH")'
/home/alex/tests/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

何が間違っている可能性がありますか?

PS問題は使用時に発生し$PYTHONPATHます:

$ python -c 'import os; print os.getenv("PYTHONPATH")'
None
4

2 に答える 2

97

あはは!解決策は簡単です!

単純な$ A=5コマンドで変数を設定していました。$ export B="foo"あなたがすべてを使用するときは大丈夫です。

これは、サブプロセスで変数を使用できるようにするためです export

  • シェルで変数を作成します
  • そしてそれをシェルの環境にエクスポートします
  • 環境はシェルのサブプロセスに渡されます。

Plain$ A="foo"はシェルで変数を作成するだけで、環境には何もしません。

シェルから呼び出されたインタープリターは、親であるシェルから環境を取得します。したがって、実際には、変数は前に環境にエクスポートする必要があります。

于 2013-09-28T19:08:44.263 に答える
9

これらの変数 (bash 用語のパラメーター) は環境変数ではありません。exportまたはを使用して、それらを環境にエクスポートしますdeclare -x環境に関する bash ドキュメントを参照してください。

于 2013-09-28T19:11:40.980 に答える