Bỏ đặt tất cả các biến ENV khớp với _PROXY


8

Tôi đang cố gắng bỏ đặt tất cả các biến môi trường phù hợp _PROXY:

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

nhưng nó thất bại với xargs: unset: No such file or directory.

Tuy nhiên, nếu tôi cố gắng thay đổi unsetthành echo, mọi thứ dường như hoạt động như mong đợi: tôi nhận được một danh sách các biến được đặt.

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

Điều gì dường như đang đi sai? (Nếu bạn có một chiến lược thay thế để hoàn thành mục tiêu, tôi quan tâm, nhưng hầu hết tôi muốn biết tại sao điều này lại thất bại.)

Ngoài ra, tôi đang sử dụng OS X, trong trường hợp có liên quan.

Câu trả lời:


8

Đó là bởi vì unsetlà một shell dựng và không phải là một lệnh bên ngoài. Điều này có nghĩa là xargskhông thể sử dụng nó vì nó chỉ chạy các lệnh trong bạn $PATH. Bạn sẽ gặp vấn đề tương tự nếu bạn đã thử với 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

Một cách khác là sử dụng một vòng lặp shell, vì nó là một phần của shell, sẽ có thể chạy các shell shell. Tôi cũng đã đơn giản hóa lệnh của bạn một chút, không cần column, bạn có thể đặt dấu tách trường awkvà không cần một giây grep, chỉ cần nói awkđể in các dòng không khớp no_proxy:

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

1

Tương tự như câu trả lời mà terdon đã viết, nhưng với sed:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.