¿Cómo elimino una variable de entorno exportada?

1559

Antes de instalar gnuplot, configuré la variable de entorno GNUPLOT_DRIVER_DIR = /home/gnuplot/build/src. Durante la instalación, algo salió mal.

Quiero eliminar la GNUPLOT_DRIVER_DIRvariable de entorno. ¿Cómo puedo lograrlo?

Alaska
fuente
2
Para aquellos que buscan cómo hacer esto en Fish Shell, consulte stackoverflow.com/questions/30703860/… (aunque esta pregunta no es para un shell específico)
Elijah Lynn el

Respuestas:

2467

unset es el comando que estás buscando.

unset GNUPLOT_DRIVER_DIR
Peder Klingenberg
fuente
55
pero esto solo funciona para una sesión, ¿qué hay de desarmarlo definitivamente? o tal vez buscando dónde está establecida la variable, para que pueda ir y eliminarla?
eLRuLL
31
Esto debería funcionar por instancia de terminal. Generalmente, cada vez que se abre una ventana de terminal, cargará variables de varios lugares como ~ / .bashrc, ~ / .profile, etc. Cualquier variable que establezca en una instancia de terminal no se transferirá a otra. Si tiene una variable que parece configurarse automáticamente cada vez que abre la terminal, intente buscarla en los diversos archivos ocultos en su directorio de inicio. O, para ver dónde se está configurando, intente "grep -r <X> ~" donde <X> es el nombre de la variable. Esto puede demorar un poco si tiene muchos archivos en su directorio personal.
matt5784
1
Sin embargo, esto también elimina la variable del shell. ¿Es la única forma unexportde hacerlo T="$MYVAR"; unset MYVAR; MYVAR="$T"; unset T?
olejorgenb
1
@olejorgenb Al menos en bash, puede decir declare +x MYVARque elimine la exportación pero mantenga el valor en el shell actual.
Peder Klingenberg
44
@PederKlingenberg también export -n MYWARfunciona en Bash.
jarno
170

Tutorial de crear y eliminar una variable de entorno en bash:

Pruebe si existe la variable DUALCASE:

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

No lo hace, así que cree la variable y expórtela:

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

Comprueba si está allí:

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

Está ahí. Así que deshazte de eso:

el@apollo:~$ unset DUALCASE

Comprueba si todavía está allí:

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

La variable de entorno exportada DUALCASE se elimina.

Comandos adicionales para ayudar a borrar las variables locales y de entorno:

Desarme todas las variables locales al valor predeterminado al iniciar sesión:

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 El comando borró todas las variables locales pero no las variables de entorno.

Desarme todas las variables de entorno al valor predeterminado al iniciar sesión:

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 El comando borró todas las variables de entorno por defecto al iniciar sesión.

Eric Leschinski
fuente
10
tal vez echo $VARIABLEsea ​​mejor que env | grep VARIABLE, es más liviano ya que no necesita imprimir todas las variables y luego enviar su salida a otro proceso (grep). Además, env | VARIABLEpodría capturar más de una variable que coincida con el mismo patrón. Plus2, echo $VARIABLEhace posible completar el nombre de la variable presionando <Tab> (si existe, eso también puede ser una pista de lo que quieres hacer).
Rodrigo Gurgel el
10
'env | grep VARIABLE 'es mejor que' echo $ VARIABLE 'porque puedo decir que realmente se ha ido'
calasyr
8
@RodrigoGurgel, echo $VARIABLEno le dice si la VARIABLE es una variable de shell (aquí llamada "variable local") o una variable de entorno, que es el punto completo del tutorial.
hmijail llora a los designados el
44
Tenga en cuenta que env -i bashparece estar creando una subshell (al menos en una Mac) que puede tener consecuencias no deseadas.
Mark Chackerian
2
@RodrigoGurgel usando echo no mostrará el conjunto de variables existente para vaciar la cadena o nul. Sin embargo, según su punto de vista, una forma adecuada de probar la variable sería env | grep -e '^VARNAME='.
Thomas
5

Debido a que la pregunta original no menciona cómo se configuró la variable, y porque llegué a esta página buscando esta respuesta específica, estoy agregando lo siguiente:

En C shell (csh / tcsh) hay dos formas de establecer una variable de entorno:

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

La diferencia en el comportamiento es que las variables establecidas con el comando setenv se exportan automáticamente a subshell mientras que las variables establecidas con set no.

Para desarmar un conjunto de variables con set , use

unset x

Para desarmar un conjunto de variables con setenv , use

unsetenv x

Nota: en todo lo anterior, supongo que el nombre de la variable es 'x'.

créditos:

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

G Eitan
fuente
Gran adición sobre las diferencias entre set / setenv wrt subshells!
niveles
4

Esto también puede funcionar.

export GNUPLOT_DRIVER_DIR=
Nilesh K.
fuente
10
La variable aún existe, pero contiene una cadena vacía, como puede ver en la salida del envcomando. Es posible que la aplicación que utiliza la variable no distinga entre variables de entorno vacías y no existentes.
Palec
1
sí, contendrá, esto fue solo para eliminar el valor, no para eliminar la variable. Pero sí, uno puede usar: desarmar GNUPLOT_DRIVER_DIR.
Nilesh K.
Esto no funciona en el caso de la variable PAGER. Traté de desactivar mi configuración de PAGER export PAGER=, pero eso simplemente deshabilitó la paginación por completo: todas mis páginas de manual se volcaron directamente al terminal. unset PAGERhizo el truco, volviéndolo al comportamiento predeterminado.
Chad
1

Como se mencionó en las respuestas anteriores, unset GNUPLOT_DRIVER_DIRdebería funcionar si ha utilizado exportpara configurar la variable. Si lo ha configurado permanentemente ~/.bashrco ~/.zshrcsimplemente eliminarlo de allí funcionará.

Rishabh Bohra
fuente