Отменить все переменные 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, если это имеет значение.

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}') 
  • Как подключить вывод поиска к другому вызову find
  • цикл xargs с переменной ввода для использования в команде с несколькими командами
  • Как объединить входы xarg с большим количеством аргументов?
  • Почему имена файлов трубопроводов в VIM прерываются, когда я возвращаюсь в оболочку?
  • Почему xargs пропускает первый аргумент при передаче в подоболочку?
  • Печать состояния файлов, обрабатываемых при использовании find
  • создать хеш md5 из рекурсивного списка файлов, когда некоторые пути имеют пробелы
  • Как выполнить команду несколько раз с разными аргументами?
  • Пропустить флаги для xargs
  • xargs и <и> в те же файлы
  • xargs, записи и стандартный ввод
  • Объединение bash% с xargs%
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.