Wie lösche ich eine exportierte Umgebungsvariable?


1558

Vor der Installation von gnuplot habe ich die Umgebungsvariable festgelegt GNUPLOT_DRIVER_DIR = /home/gnuplot/build/src. Während der Installation ist ein Fehler aufgetreten.

Ich möchte die GNUPLOT_DRIVER_DIRUmgebungsvariable entfernen . Wie kann ich das erreichen?


2
Für diejenigen, die suchen, wie dies in Fish Shell gemacht werden kann, siehe stackoverflow.com/questions/30703860/… (obwohl diese Frage nicht für eine bestimmte Shell gilt)
Elijah Lynn

Antworten:


2466

unset ist der Befehl, den Sie suchen.

unset GNUPLOT_DRIVER_DIR

5
Dies funktioniert jedoch nur für eine Sitzung. Wie wäre es, wenn Sie es definitiv deaktivieren? oder vielleicht suchen, wo die Variable gesetzt ist, damit Sie sie löschen können?
eLRuLL

31
Dies sollte pro Terminalinstanz funktionieren. Im Allgemeinen werden bei jedem Öffnen eines Terminalfensters Variablen von verschiedenen Stellen wie ~ / .bashrc, ~ / .profile usw. geladen. Alle Variablen, die Sie in einer Terminalinstanz festlegen, werden nicht auf eine andere übertragen. Wenn Sie eine Variable haben, die bei jedem Öffnen des Terminals automatisch festgelegt zu werden scheint, durchsuchen Sie die verschiedenen versteckten Dateien in Ihrem Home-Verzeichnis danach. Oder versuchen Sie "grep -r <X> ~", wobei <X> der Name der Variablen ist, um zu sehen, wo es gesetzt wird. Dies kann eine Weile dauern, wenn sich viele Dateien in Ihrem Home-Verzeichnis befinden.
Matt5784

1
Dadurch wird jedoch auch die Variable aus der Shell entfernt. Ist der einzige Weg unexportzu tun T="$MYVAR"; unset MYVAR; MYVAR="$T"; unset T?
Olejorgenb

1
@olejorgenb Zumindest in Bash können Sie sagen declare +x MYVAR, den Export zu entfernen, aber den Wert in der aktuellen Shell zu behalten.
Peder Klingenberg

4
@PederKlingenberg export -n MYWARfunktioniert auch in Bash.
Jarno

170

Exemplarische Vorgehensweise zum Erstellen und Löschen einer Umgebungsvariablen in bash:

Testen Sie, ob die Variable DUALCASE vorhanden ist:

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

Dies ist nicht der Fall. Erstellen Sie die Variable und exportieren Sie sie:

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

Überprüfen Sie, ob es dort ist:

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

Es ist dort. Also loswerden:

el@apollo:~$ unset DUALCASE

Überprüfen Sie, ob es noch vorhanden ist:

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

Die exportierte Umgebungsvariable DUALCASE wird gelöscht.

Zusätzliche Befehle zum Löschen Ihrer lokalen und Umgebungsvariablen:

Deaktivieren Sie alle lokalen Variablen beim Anmelden auf den Standardwert:

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 Befehl löschte alle lokalen Variablen, aber keine Umgebungsvariablen.

Deaktivieren Sie alle Umgebungsvariablen beim Anmelden auf den Standardwert:

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 Befehl löschte alle Umgebungsvariablen auf Standard bei der Anmeldung.


10
Vielleicht echo $VARIABLEist es besser als env | grep VARIABLE, es ist leichter, da es nicht alle Variablen drucken und dann seine Ausgabe an einen anderen (grep) Prozess senden muss. Außerdem env | VARIABLEkönnte mehr als eine Variable abgefangen werden, die demselben Muster entspricht. Plus2 echo $VARIABLEermöglicht das Vervollständigen des Variablennamens durch Drücken von <Tab> (falls vorhanden, kann dies auch ein Hinweis darauf sein, was Sie tun möchten).
Rodrigo Gurgel

10
'env | grep VARIABLE 'ist besser als' echo $ VARIABLE ', weil ich sagen kann, dass es wirklich weg ist
Calasyr

8
@RodrigoGurgel echo $VARIABLEsagt Ihnen nicht, ob es sich bei VARIABLE um eine Shell-Variable (hier als "lokale Variable" bezeichnet) oder um eine Umgebungsvariable handelt. Dies ist der springende Punkt der exemplarischen Vorgehensweise.
Hmijail trauert um Rücktritte

4
Beachten Sie, dass env -i bashanscheinend eine Unterschale erstellt wird (zumindest auf einem Mac), die unbeabsichtigte Folgen haben kann.
Mark Chackerian

2
@RodrigoGurgel mit echo zeigt keine vorhandene Variable an, die auf leere Zeichenfolge oder Null gesetzt ist. Zu Ihrem Punkt wäre jedoch ein geeigneter Weg, um auf Variablen zu testen env | grep -e '^VARNAME='.
Thomas

5

Da in der ursprünglichen Frage nicht erwähnt wird, wie die Variable festgelegt wurde, und weil ich auf dieser Seite nach dieser spezifischen Antwort gesucht habe, füge ich Folgendes hinzu:

In der C-Shell (csh / tcsh) gibt es zwei Möglichkeiten, eine Umgebungsvariable festzulegen:

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

Der Unterschied im Verhalten besteht darin, dass Variablen, die mit dem Befehl setenv festgelegt wurden, automatisch in die Unterschale exportiert werden, während Variablen, die mit set festgelegt wurden, nicht exportiert werden.

Verwenden Sie, um einen Variablensatz mit set zu deaktivieren

unset x

Verwenden Sie , um einen Variablensatz mit setenv zu deaktivieren

unsetenv x

Hinweis: In allen oben genannten Fällen gehe ich davon aus, dass der Variablenname 'x' ist.

Credits:

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


Tolle Ergänzung zu den Unterschieden zwischen Set / Setenv Wrt Subshells!
4 Ebenen

4

Dies kann auch funktionieren.

export GNUPLOT_DRIVER_DIR=

10
Die Variable ist noch vorhanden, enthält jedoch eine leere Zeichenfolge, wie Sie in der Ausgabe des envBefehls sehen können. Es kann sein, dass die Anwendung, die die Variable verwendet, nicht zwischen nicht vorhandener und leerer Umgebungsvariable unterscheidet.
Palec

1
Ja, es wird enthalten, dies war nur, um Wert zu entfernen, nicht um Variable zu entfernen. Aber ja, man kann verwenden - nicht gesetztes GNUPLOT_DRIVER_DIR.
Nilesh K.

Dies funktioniert bei der Variablen PAGER nicht. Ich habe versucht, meine PAGER-Einstellung mit zu export PAGER=deaktivieren, aber dadurch wurde das Paging vollständig deaktiviert - alle meine Manpages wurden direkt auf das Terminal übertragen. unset PAGERhat den Trick gemacht und es auf das Standardverhalten zurückgesetzt.
Tschad

1

Wie in den obigen Antworten erwähnt, unset GNUPLOT_DRIVER_DIRsollte funktionieren, wenn Sie exportdie Variable festgelegt haben. Wenn Sie es dauerhaft eingestellt haben ~/.bashrcoder es ~/.zshrcdann einfach von dort entfernen, funktioniert es.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.