GNU/Linux >> Linux の 問題 >  >> Linux

+ aを設定しても-aフラグの設定が解除されませんか?

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の設定を解除します しかし、そのために変数がエクスポート解除されることはありません。次に、各変数をエクスポート解除または設定解除する必要があります。

オプションallexportset -aと同じです )新規の自動エクスポートを可能にします および変更 変数。 set -aをアクティブ化する前に存在する変数 オプションはエクスポートされません。

テスト前の2つのポイント:

  1. 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
    
  2. 環境変数をテストするためのシェルの方法は、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: 

Linux
  1. 登録されたコールバックが提供されたURLと一致しません–WSO2エラーを修正します

  2. tmux Ctrl+B が機能しない

  3. ファイルを実行不可として設定するには?

  1. Emulator -avdは仮想デバイスを起動しませんか?

  2. 「java」コマンドは、インストールされている JVM を実行しません

  3. Androidエミュレーターが起動しない、avd

  1. Linux sed コマンドでターゲット ファイルが変更されない

  2. wc -l は、行末文字がない場合、ファイルの最後をカウントしません

  3. ここで、変数名の後の「-」(ダッシュ) は何をしますか?