Bagaimana cara saya menghapus variabel lingkungan yang diekspor?

1559

Sebelum menginstal gnuplot, saya mengatur variabel lingkungan GNUPLOT_DRIVER_DIR = /home/gnuplot/build/src. Selama instalasi, ada yang salah.

Saya ingin menghapus GNUPLOT_DRIVER_DIRvariabel lingkungan. Bagaimana saya bisa mencapainya?

AK
sumber
2
Bagi mereka yang mencari cara melakukan ini di shell Ikan lihat stackoverflow.com/questions/30703860/… (meskipun pertanyaan ini bukan untuk shell tertentu)
Elijah Lynn

Jawaban:

2467

unset adalah perintah yang Anda cari.

unset GNUPLOT_DRIVER_DIR
Peder Klingenberg
sumber
5
tetapi ini hanya berfungsi untuk satu sesi, bagaimana dengan tidak menyetelnya dengan pasti? atau mungkin mencari di mana set variabel, sehingga Anda dapat pergi dan menghapusnya?
eLRuLL
31
Ini harus bekerja per instance terminal. Umumnya, setiap kali jendela terminal dibuka, itu akan memuat variabel dari berbagai tempat seperti ~ / .bashrc, ~ / .profile, dll. Setiap variabel yang Anda atur dalam satu instance terminal tidak akan terbawa ke yang lain. Jika Anda memiliki variabel yang tampaknya diset secara otomatis setiap kali Anda membuka terminal, coba cari melalui berbagai file tersembunyi di direktori home Anda untuk itu. Atau, untuk melihat di mana ia diatur, coba "grep -r <X> ~" di mana <X> adalah nama variabel. Ini mungkin memakan waktu cukup lama jika Anda memiliki banyak file di direktori home Anda.
matt5784
1
Ini menghapus variabel dari shell juga. Apakah satu-satunya cara unexportuntuk melakukannya T="$MYVAR"; unset MYVAR; MYVAR="$T"; unset T?
olejorgenb
1
@olejorgenb Setidaknya dalam bash, Anda dapat mengatakan declare +x MYVARuntuk menghapus ekspor tetapi menyimpan nilai dalam shell saat ini.
Peder Klingenberg
4
@PederKlingenberg juga export -n MYWARberfungsi di Bash.
jarno
170

Panduan membuat dan menghapus variabel lingkungan di bash:

Uji apakah variabel DUALCASE ada:

el@apollo:~$ env | grep DUALCASE
el@apollo:~$ 

Tidak, jadi buat variabel dan ekspor:

el@apollo:~$ DUALCASE=1
el@apollo:~$ export DUALCASE

Periksa apakah ada di sana:

el@apollo:~$ env | grep DUALCASE
DUALCASE=1

Itu di sana. Jadi singkirkan itu:

el@apollo:~$ unset DUALCASE

Periksa apakah masih ada di sana:

el@apollo:~$ env | grep DUALCASE
el@apollo:~$ 

Variabel lingkungan yang diekspor DUALCASE dihapus.

Perintah tambahan untuk membantu menghapus variabel lokal dan lingkungan Anda:

Batalkan semua variabel lokal kembali ke default saat login:

el@apollo:~$ CAN="chuck norris"
el@apollo:~$ set | grep CAN
CAN='chuck norris'
el@apollo:~$ env | grep CAN
el@apollo:~$
el@apollo:~$ exec bash
el@apollo:~$ set | grep CAN
el@apollo:~$ env | grep CAN
el@apollo:~$

exec bash perintah membersihkan semua variabel lokal tetapi tidak variabel lingkungan.

Batalkan semua variabel lingkungan kembali ke default saat login:

el@apollo:~$ export DOGE="so wow"
el@apollo:~$ env | grep DOGE
DOGE=so wow
el@apollo:~$ env -i bash
el@apollo:~$ env | grep DOGE
el@apollo:~$

env -i bash perintah membersihkan semua variabel lingkungan ke default saat login.

Eric Leschinski
sumber
10
mungkin echo $VARIABLElebih baik daripada env | grep VARIABLE, lebih ringan karena tidak perlu mencetak semua variabel dan kemudian mengirimkan hasilnya ke proses (grep) yang lain. Plus, env | VARIABLEbisa menangkap lebih dari satu variabel yang cocok dengan pola yang sama. Plus2, echo $VARIABLEmemungkinkan untuk melengkapi nama variabel dengan menekan <Tab> (jika ada, itu juga bisa menjadi petunjuk untuk apa yang ingin Anda lakukan).
Rodrigo Gurgel
10
'env | grep VARIABLE 'lebih baik daripada' echo $ VARIABLE 'karena saya tahu itu benar-benar hilang
calasyr
8
@RodrigoGurgel, echo $VARIABLEtidak memberi tahu Anda apakah VARIABEL adalah variabel shell (di sini disebut "variabel lokal") atau variabel lingkungan, yang merupakan inti dari langkah-langkah tersebut.
hmijail meratapi orang-orang yang akan mengundurkan diri pada
4
Catatan yang env -i bashtampaknya membuat subkulit (setidaknya pada Mac) yang mungkin memiliki konsekuensi yang tidak diinginkan.
Mark Chackerian
2
@RodrigoGurgel menggunakan echo tidak akan menampilkan set variabel yang ada untuk mengosongkan string atau nul. ke titik Anda, bagaimanapun, cara yang tepat untuk menguji variabel akan menjadi env | grep -e '^VARNAME='.
Thomas
5

Karena pertanyaan awal tidak menyebutkan bagaimana variabel ditetapkan, dan karena saya membuka halaman ini untuk mencari jawaban spesifik ini, saya menambahkan yang berikut:

Dalam C shell (csh / tcsh) ada dua cara untuk mengatur variabel lingkungan:

  1. set x = "something"
  2. setenv x "something"

Perbedaan dalam perilaku adalah bahwa variabel yang ditetapkan dengan perintah setenv secara otomatis diekspor ke subshell sedangkan variabel yang diatur dengan set tidak.

Untuk membatalkan set variabel dengan set , gunakan

unset x

Untuk membatalkan set variabel dengan setenv , gunakan

unsetenv x

Catatan: dalam semua hal di atas, saya berasumsi bahwa nama variabel adalah 'x'.

kredit:

https://www.cyberciti.biz/faq/unix-linux-difference-between-set-and-setenv-c-shell-variable/ https://www.oreilly.com/library/view/solaristm-7- referensi / 0130200484 / 0130200484_ch18lev1sec24.html

G Eitan
sumber
Tambahan yang bagus tentang perbedaan antara subshell set / setenv wrt!
tingkat
4

ini juga bisa berfungsi.

export GNUPLOT_DRIVER_DIR=
Nilesh K.
sumber
10
Variabel masih ada, tetapi berisi string kosong, seperti yang Anda lihat di output dari envperintah. Mungkin saja kasus bahwa aplikasi yang menggunakan variabel tidak membedakan antara variabel lingkungan tidak ada dan kosong.
Palec
1
ya itu akan mengandung, ini hanya untuk menghilangkan nilai bukan untuk menghapus variabel. Tapi ya, orang dapat menggunakan - batalkan GNUPLOT_DRIVER_DIR.
Nilesh K.
Ini tidak berfungsi dalam kasus variabel PAGER. Saya mencoba untuk membatalkan pengaturan PAGER saya export PAGER=, tetapi itu hanya menonaktifkan paging sepenuhnya - semua halaman manual saya langsung dibuang ke terminal. unset PAGERmelakukan trik, mengembalikannya ke perilaku default.
Chad
1

Seperti yang disebutkan dalam jawaban di atas, unset GNUPLOT_DRIVER_DIRseharusnya berfungsi jika Anda telah exportmengatur variabel. Jika Anda telah mengaturnya secara permanen di ~/.bashrcatau ~/.zshrckemudian hanya menghapusnya dari sana akan berhasil.

Rishabh Bohra
sumber