Come cancello una variabile d'ambiente esportata?


1559

Prima di installare gnuplot, ho impostato la variabile d'ambiente GNUPLOT_DRIVER_DIR = /home/gnuplot/build/src. Durante l'installazione, qualcosa è andato storto.

Voglio rimuovere la GNUPLOT_DRIVER_DIRvariabile d'ambiente. Come posso raggiungerlo?


2
Per coloro che cercano come farlo in Fish shell consultare stackoverflow.com/questions/30703860/… (anche se questa domanda non è per una shell specifica)
Elijah Lynn

Risposte:


2467

unset è il comando che stai cercando.

unset GNUPLOT_DRIVER_DIR

5
ma questo funziona solo per una sessione, che ne dici di annullarlo definitivamente? o forse cercando dove è impostata la variabile, in modo da poter andare ed eliminarla?
eLRuLL,

31
Questo dovrebbe funzionare per istanza terminale. In genere, ogni volta che viene aperta una finestra del terminale, verranno caricate variabili da varie posizioni come ~ / .bashrc, ~ / .profile, ecc. Qualsiasi variabile impostata in un'istanza di terminale non verrà trasferita a un'altra. Se hai una variabile che sembra essere impostata automaticamente ogni volta che apri il terminale, prova a cercare tra i vari file nascosti nella tua home directory. Oppure, per vedere dove viene impostato, prova "grep -r <X> ~" dove <X> è il nome della variabile. L'operazione potrebbe richiedere del tempo se nella directory home sono presenti molti file.
matt5784,

1
Questo rimuove anche la variabile dalla shell. È l'unico modo unexportper fare T="$MYVAR"; unset MYVAR; MYVAR="$T"; unset T?
olejorgenb,

1
@olejorgenb Almeno in bash, puoi dire declare +x MYVARdi rimuovere l'esportazione ma mantenere il valore nella shell corrente.
Peder Klingenberg,

4
@PederKlingenberg export -n MYWARfunziona anche in Bash.
jarno,

170

Procedura dettagliata per la creazione e l'eliminazione di una variabile di ambiente in bash:

Verifica se esiste la variabile DUALCASE:

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

Non funziona, quindi crea la variabile ed esportala:

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

Controlla se c'è:

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

È qui. Quindi liberartene:

el@apollo:~$ unset DUALCASE

Controlla se è ancora lì:

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

La variabile d'ambiente esportata DUALCASE viene eliminata.

Comandi extra per aiutare a cancellare le variabili locali e ambientali:

Ripristina tutte le variabili locali ai valori predefiniti all'accesso:

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 il comando ha cancellato tutte le variabili locali ma non le variabili di ambiente.

Ripristina tutte le variabili d'ambiente ai valori predefiniti all'accesso:

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 il comando ha cancellato tutte le variabili di ambiente sui valori predefiniti all'accesso.


10
forse echo $VARIABLEè meglio di env | grep VARIABLE, è più leggero in quanto non ha bisogno di stampare tutte le variabili e quindi inviare il suo output a un altro processo (grep). Inoltre, env | VARIABLEpotrebbe catturare più di una variabile che corrisponde allo stesso modello. Plus2, echo $VARIABLErende possibile completare il nome della variabile premendo <Tab> (se esiste, anche questo può essere un suggerimento per quello che vuoi fare).
Rodrigo Gurgel,

10
'env | grep VARIABLE 'è meglio di' echo $ VARIABLE 'perché posso dire che è veramente andato
calasyr

8
@RodrigoGurgel, echo $VARIABLEnon ti dice se VARIABLE è una variabile di shell (qui chiamata "variabile locale") o una variabile di ambiente, che è l'intero punto della procedura dettagliata.
Hmijail piange le dimissioni il

4
Si noti che env -i bashsembra creare una subshell (almeno su un Mac) che potrebbe avere conseguenze indesiderate.
Mark Chackerian,

2
@RodrigoGurgel usando echo non mostrerà la variabile esistente impostata su stringa vuota o nul. al tuo punto, tuttavia, sarebbe un modo corretto di verificare la variabile env | grep -e '^VARNAME='.
Thomas,

5

Poiché la domanda originale non menziona come è stata impostata la variabile e poiché sono arrivato a questa pagina alla ricerca di questa risposta specifica, sto aggiungendo quanto segue:

Nella shell C (csh / tcsh) ci sono due modi per impostare una variabile d'ambiente:

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

La differenza nel comportamento è che le variabili impostate con il comando setenv vengono automaticamente esportate in subshell mentre le variabili impostate con set non lo sono.

Per annullare l'impostazione di un set di variabili con set , utilizzare

unset x

Per annullare l'impostazione di un set di variabili con setenv , utilizzare

unsetenv x

Nota: in tutto quanto sopra, suppongo che il nome della variabile sia 'x'.

crediti:

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


Grande aggiunta sulle differenze tra subshells set / setenv wrt!
livelli

4

questo può anche funzionare.

export GNUPLOT_DRIVER_DIR=

10
La variabile esiste ancora, ma contiene una stringa vuota, come puoi vedere nell'output del envcomando. È possibile che l'applicazione che utilizza la variabile non distingua tra variabile di ambiente vuota e inesistente.
Palec,

1
sì conterrà, questo era solo per rimuovere il valore per non rimuovere la variabile. Sì, si può usare - disinserire GNUPLOT_DRIVER_DIR.
Nilesh K.

Questo non funziona nel caso della variabile PAGER. Ho provato a disimpostare la mia impostazione PAGER export PAGER=, ma questo ha disabilitato del tutto il paging - tutte le mie pagine man sono state scaricate direttamente sul terminale. unset PAGERha fatto il trucco, ripristinandolo al comportamento predefinito.
Ciad

1

Come menzionato nelle risposte sopra, unset GNUPLOT_DRIVER_DIRdovrebbe funzionare se hai usato exportper impostare la variabile. Se l'hai impostato permanentemente ~/.bashrco ~/.zshrcsemplicemente rimuoverlo da lì funzionerà.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.