名前が空の環境変数の設定解除

名前が空の環境変数の設定解除

何らかの理由で、私のシステムは名前なしで環境変数を設定します。これは、Pythonに問題を引き起こすオブジェクト(より具体的にはオブジェクト)printenvのみを含む縮小出力で見ることができます。=os.environ

この環境変数をどのように設定解除できますか?他の回避策があります(たとえば、変数が最初に設定されないようにするなど)。

例を再現するenv -i printenvか、Pythonの問題の場合は、次を実行してください。env -i = python -c "import os; os.environ.clear()"

ベストアンサー1

環境変数は空の名前を持つべきではないので、多くのユーティリティはそれをサポートしません。

GNU coreutilsコマンドはenv空の名前で環境変数の設定をサポートしますが、設定を解除することはできません。これは間違いです。

$ env '=wibble' env |grep wibble                                 
=wibble
$ env '=wibble' env -u '' env
env: cannot unset `': Invalid argument

通常のシェルは空の名前を設定解除することもできません。大丈夫です。空の名前は環境変数やシェル変数として使用しないでください。 Zshは欠陥のある唯一の製品です。仕事をするふりをするが、実際には何もしない。

$ env '=wibble' dash -c 'unset ""'
dash: 1: unset: : bad variable name
$ env '=wibble' bash -c 'unset ""'
bash: line 0: unset: `': not a valid identifier
$ env '=wibble' ksh -c 'unset ""'
ksh[1]: unset: : invalid variable name
$ env '=wibble' mksh -c 'unset ""'
mksh: : is read only
$ env '=wibble' posh -c 'unset ""'
posh: unset:  is read only
$ env '=wibble' zsh -c 'unset ""'
$ env '=wibble' zsh -c 'unset ""; env' | grep wibble
=wibble

ご存知のように、Pythonは環境変数に空の名前が見つかるとエラーが発生します。

パールそのような問題はないので、回避策になることもできます。外部プロセスを使用して環境を変更するには、新しいシェルを実行する必要があります。

perl -e 'delete $ENV{""}; exec $ARGV[0] @ARGV' "$SHELL" "-$-"

おすすめ記事