Isso porque unset
é um shell embutido e não um comando externo. Isso significa que xargs
não pode usá-lo, uma vez que apenas executa comandos que estão no seu $PATH
. Você teria o mesmo problema se tentasse com 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
Uma maneira de contornar isso é usar um loop de shell que, como parte do shell, será capaz de executar builtins de shell. Eu também simplifiquei um pouco o seu comando, não há necessidade de column
, você pode definir o separador de campo para awk
e não há necessidade de um segundo grep
, apenas diga awk
para imprimir linhas que não correspondem no_proxy
:
while read var; do unset $var; done < <(env | grep -i proxy |
awk -F= '!/no_proxy/{print $1}')