Deseleziona tutte le variabili ENV corrispondenti a _PROXY


8

Sto cercando di annullare l'impostazione di tutte le variabili di ambiente corrispondenti _PROXY:

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

ma sta fallendo xargs: unset: No such file or directory.

Se provo cambiando unseta echo, però, tutto sembra funzionare come previsto: ho un elenco di variabili che sono impostati.

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

Cosa sembra andare storto? (Se hai una strategia alternativa per raggiungere l'obiettivo, sono interessato, ma mi piacerebbe soprattutto sapere perché questo non riesce.)

Inoltre, sto usando OS X, nel caso sia rilevante.

Risposte:


8

Questo perché unsetè incorporato nella shell e non un comando esterno. Ciò significa che xargsnon è possibile utilizzarlo poiché esegue solo i comandi presenti nel tuo $PATH. Avresti lo stesso problema se provassi con 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

Un modo per aggirare questo è usare un loop di shell che, poiché fa parte della shell, sarà in grado di eseguire i builtin della shell. Ho anche semplificato un po 'il tuo comando, non è necessario column, puoi impostare il separatore di campi per awke non c'è bisogno di un secondo grep, basta dire awka stampare linee che non corrispondono no_proxy:

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

1

Simile alla risposta scritta da Terdon, ma con sed:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.