Jak usunąć wyeksportowaną zmienną środowiskową?

1556

Przed zainstalowaniem gnuplot ustawiam zmienną środowiskową GNUPLOT_DRIVER_DIR = /home/gnuplot/build/src. Podczas instalacji coś poszło nie tak.

Chcę usunąć GNUPLOT_DRIVER_DIRzmienną środowiskową. Jak mogę to osiągnąć?

AK
źródło
2
Dla tych, którzy szukają tego, jak to zrobić w skorupce ryby, zobacz stackoverflow.com/questions/30703860/… (nawet jeśli to pytanie nie dotyczy konkretnej powłoki)
Elijah Lynn

Odpowiedzi:

2463

unset to polecenie, którego szukasz.

unset GNUPLOT_DRIVER_DIR
Peder Klingenberg
źródło
4
ale to działa tylko na sesję, co z pewnością ją rozbroisz? a może szukając, gdzie jest ustawiona zmienna, aby móc ją usunąć?
eLRuLL
31
To powinno działać na instancję terminala. Zasadniczo za każdym razem, gdy okno terminalu jest otwierane, ładuje zmienne z różnych miejsc, takich jak ~ / .bashrc, ~ / .profile itp. Wszelkie zmienne ustawione w jednej instancji terminala nie zostaną przeniesione do innej. Jeśli masz zmienną, która wydaje się być ustawiana automatycznie przy każdym otwarciu terminala, spróbuj przeszukać różne ukryte pliki w katalogu domowym. Lub, aby zobaczyć, gdzie jest ustawiany, spróbuj „grep -r <X> ~” gdzie <X> jest nazwą zmiennej. Może to chwilę potrwać, jeśli masz dużo plików w swoim katalogu domowym.
matt5784
1
To jednak usuwa również zmienną z powłoki. Czy to jedyny sposób unexportna zrobienie tego T="$MYVAR"; unset MYVAR; MYVAR="$T"; unset T?
olejorgenb
1
@olejorgenb Przynajmniej w bash, możesz powiedzieć, declare +x MYVARaby usunąć eksport, ale zachowaj wartość w bieżącej powłoce.
Peder Klingenberg,
4
@PederKlingenberg export -n MYWARdziała również w Bash.
jarno
170

Instrukcja tworzenia i usuwania zmiennej środowiskowej w bash:

Sprawdź, czy istnieje zmienna DUALCASE:

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

Nie robi tego, więc utwórz zmienną i wyeksportuj ją:

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

Sprawdź, czy tam jest:

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

Jest tam. Pozbądź się tego:

el@apollo:~$ unset DUALCASE

Sprawdź, czy nadal tam jest:

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

Wyeksportowana zmienna środowiskowa DUALCASE jest usuwana.

Dodatkowe polecenia, które pomogą wyczyścić zmienne lokalne i środowiskowe:

Zresetuj wszystkie lokalne zmienne do wartości domyślnych podczas logowania:

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 polecenie wyczyściło wszystkie zmienne lokalne, ale nie zmienne środowiskowe.

Przywróć wszystkie zmienne środowiskowe do wartości domyślnych podczas logowania:

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 polecenie wyczyściło wszystkie zmienne środowiskowe do domyślnych podczas logowania.

Eric Leschinski
źródło
10
być może echo $VARIABLEjest lepszy niż env | grep VARIABLE, jest lżejszy, ponieważ nie musi drukować wszystkich zmiennych, a następnie wysyłać dane wyjściowe do innego procesu (grep). Ponadto env | VARIABLEmoże wychwycić więcej niż jedną zmienną pasującą do tego samego wzorca. Plus2, echo $VARIABLEumożliwia uzupełnienie nazwy zmiennej poprzez wciśnięcie <Tab> (jeśli istnieje, może to być również wskazówka do tego, co chcesz zrobić).
Rodrigo Gurgel
10
„env | grep VARIABLE ”jest lepszy niż„ echo $ VARIABLE ”, ponieważ mogę powiedzieć, że naprawdę zniknął
calasyr
8
@RodrigoGurgel, echo $VARIABLEnie mówi ci, czy VARIABLE jest zmienną powłoki (tutaj nazywaną „zmienną lokalną”) czy zmienną środowiskową, która jest całym punktem instrukcji.
Hmijail opłakuje odrodzenie
4
Zauważ, że env -i bashwydaje się, że tworzy podpowłokę (przynajmniej na komputerze Mac), co może mieć niezamierzone konsekwencje.
Mark Chackerian,
2
@RodrigoGurgel za pomocą echa nie pokaże istniejącej zmiennej ustawionej na pusty ciąg znaków lub wartość nul. Twoim zdaniem byłby jednak odpowiedni sposób na sprawdzenie zmiennej env | grep -e '^VARNAME='.
Thomas
5

Ponieważ oryginalne pytanie nie wspomina o tym, jak zmienna została ustawiona, i ponieważ doszedłem do tej strony, szukając tej konkretnej odpowiedzi, dodaję:

W powłoce C (csh / tcsh) istnieją dwa sposoby ustawienia zmiennej środowiskowej:

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

Różnica w zachowaniu polega na tym, że zmienne ustawione za pomocą polecenia setenv są automatycznie eksportowane do podpowłoki, podczas gdy zmienne ustawione za pomocą zestawu nie są.

Aby rozbroić zestaw zmiennych za pomocą set , użyj

unset x

Aby rozbroić zestaw zmiennych za pomocą setenv , użyj

unsetenv x

Uwaga: we wszystkich powyższych przypadkach zakładam, że nazwa zmiennej to „x”.

kredyty:

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

G Eitan
źródło
Świetny dodatek na temat różnic między podpowłokami set / setenv wrt!
poziomy
4

to może również działać.

export GNUPLOT_DRIVER_DIR=
Nilesh K.
źródło
10
Zmienna wciąż istnieje, ale zawiera pusty ciąg, jak widać w danych wyjściowych envpolecenia. Może się tak zdarzyć, że aplikacja korzystająca ze zmiennej nie rozróżnia nieistniejącej i pustej zmiennej środowiskowej.
Palec
1
tak, będzie zawierać, to było po prostu usunąć wartość, aby nie usunąć zmiennej. Ale tak, można użyć - unset GNUPLOT_DRIVER_DIR.
Nilesh K.
To nie działa w przypadku zmiennej PAGER. Próbowałem zresetować moje ustawienie PAGER export PAGER=, ale to całkowicie wyłączyło stronicowanie - wszystkie moje strony podręcznika właśnie zrzuciły prosto do terminala. unset PAGERwykonał lewę, przywracając domyślne zachowanie.
Czad
1

Jak wspomniano w powyższych odpowiedziach, unset GNUPLOT_DRIVER_DIRpowinno działać, jeśli exportustawiłeś zmienną. Jeśli ustawiłeś go na stałe, ~/.bashrca ~/.zshrcnastępnie po prostu usunięcie go stamtąd będzie działać.

Rishabh Bohra
źródło