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

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

一致するすべての環境変数を設定解除しようとしています_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

unsetしかし、に変更しようとすると、echoすべてが期待どおりに機能するようです。設定された変数のリストが表示されます。

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を使用しています。

ベストアンサー1

その理由は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フィールド区切り記号を設定でき、awk2番目の区切り文字は必要ありません。一致しない行を印刷するようにgrep指示します。awkno_proxy

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

おすすめ記事