Отменить все переменные ENV, соответствующие _PROXY

Я пытаюсь отключить все переменные среды, которые соответствуют _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, если это имеет значение.

  • Найти файлы рекурсивно, которые старше одного года и не принадлежат конкретному пользователю
  • Выполнение нескольких команд с помощью xargs
  • передавая переменные от 'ls' до 'tar' через 'xargs'
  • Как повторять переменные дважды в xargs
  • cmd2 `cmd1` vs cmd1 | xargs cmd2
  • Что делает «-t» в команде mv? Пример ниже
  • xargs и линейный трубопровод
  • Как вы можете перемещать или копировать определенные файлы из списка текстовых файлов
  • One Solution collect form web for “Отменить все переменные ENV, соответствующие _PROXY”

    Это потому, что 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 

    Один из способов – использовать цикл оболочки, который, поскольку он является частью оболочки, сможет запускать встроенные оболочки. Я также немного упростил вашу команду, нет необходимости в column , вы можете установить разделитель полей для awk и нет необходимости в втором grep , просто скажите awk для печати строк, которые не соответствуют no_proxy :

     while read var; do unset $var; done < <(env | grep -i proxy | awk -F= '!/no_proxy/{print $1}') 
    Linux и Unix - лучшая ОС в мире.