Отменить все переменные 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 .

  • Как определить файлы формата dos в git bash
  • Может ли grep выводить только указанные группы, которые соответствуют?
  • Чтение файла журнала между двумя датами
  • Обнаружение шаблона в конце строки с помощью grep
  • Как вычесть строки (строки) с помощью AWK
  • Использование grep или awk
  • Однако, если я попытаюсь изменить 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, если это имеет значение.

  • Сортировка по одному столбцу, затем
  • сравнить 2 столбца из 2 разных CSV-файлов
  • Как найти и заменить значение столбца поля в UNIX
  • Установите переменные переменных переменных в bash (или другие)
  • find + grep не работает
  • Сравнение файлов на основе 5 полей с использованием Awk и Bash
  • 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 - лучшая ОС в мире.