_PROXYに一致するすべてのENV変数の設定を解除します


8

私は一致するすべての環境変数を設定解除しようとしています_PROXY

env | grep -i _proxy | column -t -s '=' | awk '{ print $1 }' | grep -iv 'no_proxy' | xargs -0 -I variable unset variable

しかし、それはで失敗していxargs: unset: No such file or directoryます。

ただし、に変更しようとするunsetecho、すべてが期待どおりに機能しているように見えます。設定されている変数のリストが表示されます。

env | grep -i _proxy | column -t -s '=' | awk '{ print $1 }' | grep -iv 'no_proxy' | xargs -0 -I variable echo variable
http_proxy
ftp_proxy
FTP_PROXY
https_proxy
HTTPS_PROXY
HTTP_PROXY

何がうまくいかないようですか?(あなたが目標を達成するための代替戦略を持っている場合は、私が興味を持ってんだけど、私はいただきたいすべてのほとんどを、これは失敗している理由を知りたいです。)

また、必要に応じて、OS Xを使用しています。

回答:


8

これunsetは、がシェル組み込みであり、外部コマンドではないためです。これは、にあるxargsコマンドのみを実行するので、それを使用できないことを意味します$PATH。以下を試した場合も同じ問題が発生しますcd

$ ls -l
total 4
drwxr-xr-x 2 terdon terdon 4096 Jun 16 02:02 foo
$ echo foo | xargs cd
xargs: cd: No such file or directory

これを回避する1つの方法は、シェルループを使用することです。これは、シェルの一部であるため、ビルトインシェルを実行できます。コマンドも少し簡略化しました。の必要はcolumnありません。フィールド区切りを設定できawk、2番目のは必要ありません。一致しない行を出力するようにgrep指示awkしますno_proxy

while read var; do unset $var; done < <(env | grep -i proxy | 
    awk -F= '!/no_proxy/{print $1}')

1

terdonが書いた答えに似ていますが、とsed

while read var; do unset $var; done < <(env | grep -i _proxy | sed 's/=.*//g')

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.