Deaktivieren Sie alle ENV-Variablen, die mit _PROXY übereinstimmen


8

Ich versuche, alle übereinstimmenden Umgebungsvariablen zu deaktivieren _PROXY:

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

aber es scheitert mit xargs: unset: No such file or directory.

Wenn ich versuche , zu ändern unsetzu echo, jedoch scheint alles wie erwartet: Ich habe eine Liste von Variablen erhalten , die gesetzt werden.

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

Was scheint falsch zu laufen? (Wenn Sie eine alternative Strategie zur Erreichung des Ziels haben, bin ich interessiert, aber ich würde vor allem gerne wissen, warum dies fehlschlägt.)

Außerdem verwende ich OS X, falls dies relevant ist.

Antworten:


8

Das unsetliegt daran, dass eine Shell eingebaut ist und kein externer Befehl. Dies bedeutet, dass xargses nicht verwendet werden kann, da nur Befehle ausgeführt werden, die sich in Ihrem befinden $PATH. Sie würden das gleiche Problem bekommen, wenn Sie es versuchen mit 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

Eine Möglichkeit, dies zu umgehen, besteht darin, eine Shell-Schleife zu verwenden, die, da sie Teil der Shell ist, Shell-Builtins ausführen kann. Ich habe Ihren Befehl auch ein wenig vereinfacht, es ist nicht erforderlich column, Sie können das Feldtrennzeichen festlegen awkund es ist keine Sekunde erforderlich. grepSagen Sie einfach, awkdass Zeilen gedruckt werden sollen, die nicht übereinstimmen no_proxy:

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

1

Ähnlich der Antwort, die Terdon schrieb, aber mit sed:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.