Batalkan semua variabel ENV yang cocok dengan _PROXY


8

Saya mencoba untuk menghapus semua variabel lingkungan yang cocok _PROXY:

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

tapi gagal dengan xargs: unset: No such file or directory.

Jika saya mencoba mengubah unsetke echo, bagaimanapun, segala sesuatu tampaknya bekerja seperti yang diharapkan: Saya mendapatkan daftar variabel yang ditetapkan.

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

Apa yang tampaknya salah? (Jika Anda memiliki strategi alternatif untuk mencapai tujuan, saya tertarik, tetapi saya terutama ingin tahu mengapa ini gagal.)

Juga, saya menggunakan OS X, kalau-kalau itu relevan.

Jawaban:


8

Itu karena unsetmerupakan builtin shell dan bukan perintah eksternal. Ini berarti xargstidak dapat menggunakannya karena itu hanya menjalankan perintah yang ada di Anda $PATH. Anda akan mendapatkan masalah yang sama jika Anda mencoba 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

Salah satu cara mengatasi hal ini adalah dengan menggunakan loop shell yang, karena merupakan bagian dari shell, akan dapat menjalankan shell builtins. Saya juga sedikit menyederhanakan perintah Anda, Anda tidak perlu column, Anda dapat mengatur pemisah bidang awkdan tidak perlu sebentar grep, katakan saja awkuntuk mencetak garis yang tidak cocok no_proxy:

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

1

Mirip dengan jawaban yang terdon tulis, tetapi dengan sed:

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.