Comment supprimer une variable d'environnement exportée?

1560

Avant d'installer gnuplot, j'ai défini la variable d'environnement GNUPLOT_DRIVER_DIR = /home/gnuplot/build/src. Pendant l'installation, quelque chose s'est mal passé.

Je souhaite supprimer la GNUPLOT_DRIVER_DIRvariable d'environnement. Comment puis-je y parvenir?

AK
la source
2
Pour ceux qui cherchent à faire cela dans la coquille de poisson, voir stackoverflow.com/questions/30703860/… (même si cette question ne concerne pas une coquille spécifique)
Elijah Lynn

Réponses:

2468

unset est la commande que vous recherchez.

unset GNUPLOT_DRIVER_DIR
Peder Klingenberg
la source
5
mais cela ne fonctionne que pour une session, que diriez-vous de le désactiver définitivement? ou peut-être en recherchant où est la variable définie, afin que vous puissiez aller la supprimer?
eLRuLL
32
Cela devrait fonctionner par instance de terminal. Généralement, chaque fois qu'une fenêtre de terminal est ouverte, elle charge des variables de divers endroits tels que ~ / .bashrc, ~ / .profile, etc. Toutes les variables que vous définissez dans une instance de terminal ne seront pas transférées dans une autre. Si vous avez une variable qui semble être définie automatiquement à chaque fois que vous ouvrez un terminal, essayez de la rechercher dans les différents fichiers cachés de votre répertoire personnel. Ou, pour voir où il est défini, essayez "grep -r <X> ~" où <X> est le nom de la variable. Cela peut prendre un certain temps si vous avez beaucoup de fichiers dans votre répertoire personnel.
matt5784
1
Cela supprime également la variable du shell. Est-ce la seule façon de unexportle faire T="$MYVAR"; unset MYVAR; MYVAR="$T"; unset T?
olejorgenb
1
@olejorgenb Au moins dans bash, vous pouvez dire declare +x MYVARde supprimer l'exportation mais de conserver la valeur dans le shell actuel.
Peder Klingenberg
5
@PederKlingenberg export -n MYWARfonctionne également dans Bash.
jarno
171

Procédure pas à pas pour créer et supprimer une variable d'environnement dans bash:

Testez si la variable DUALCASE existe:

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

Ce n'est pas le cas, alors créez la variable et exportez-la:

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

Vérifiez s'il est là:

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

C'est là. Alors débarrassez-vous-en:

el@apollo:~$ unset DUALCASE

Vérifiez s'il est toujours là:

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

La variable d'environnement exportée DUALCASE est supprimée.

Commandes supplémentaires pour effacer vos variables locales et d'environnement:

Réinitialisez toutes les variables locales par défaut lors de la connexion:

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 La commande a effacé toutes les variables locales mais pas les variables d'environnement.

Réinitialisez toutes les variables d'environnement par défaut lors de la connexion:

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 La commande a effacé toutes les variables d'environnement par défaut lors de la connexion.

Eric Leschinski
la source
10
echo $VARIABLEest peut - être mieux que env | grep VARIABLE, il est plus léger car il n'a pas besoin d'imprimer toutes les variables, puis d'envoyer sa sortie à un autre processus (grep). De plus, env | VARIABLEpourrait attraper plus d'une variable qui correspond au même modèle. Plus2, echo $VARIABLEpermet de compléter le nom de la variable en appuyant sur <Tab> (s'il existe, cela peut également être un indice de ce que vous voulez faire).
Rodrigo Gurgel
10
'env | grep VARIABLE 'est meilleur que' echo $ VARIABLE 'parce que je peux dire que c'est vraiment parti
calasyr
8
@RodrigoGurgel, echo $VARIABLEne vous dit pas si la VARIABLE est une variable shell (ici appelée "variable locale") ou une variable d'environnement, qui est tout l'intérêt de la procédure pas à pas.
hmijail pleure les démissionnaires
4
Notez que cela env -i bashsemble créer un sous-shell (au moins sur un Mac) qui peut avoir des conséquences inattendues.
Mark Chackerian
2
@RodrigoGurgel utilisant echo n'affichera pas la variable existante définie sur une chaîne vide ou nulle. à votre point, cependant, une bonne façon de tester la variable serait env | grep -e '^VARNAME='.
Thomas
5

Parce que la question d'origine ne mentionne pas comment la variable a été définie, et parce que je suis arrivé sur cette page à la recherche de cette réponse spécifique, j'ajoute ce qui suit:

Dans le shell C (csh / tcsh), il existe deux façons de définir une variable d'environnement:

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

La différence de comportement est que les variables définies avec commande setenv sont automatiquement exportées vers le sous-shell tandis que les variables définies avec l' ensemble ne le sont pas.

Pour désactiver un jeu de variables avec set , utilisez

unset x

Pour désactiver un jeu de variables avec setenv , utilisez

unsetenv x

Remarque: dans tout ce qui précède, je suppose que le nom de la variable est «x».

crédits:

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

G Eitan
la source
Excellent ajout sur les différences entre les sous-coques set / setenv wrt!
niveaux
4

cela peut également fonctionner.

export GNUPLOT_DRIVER_DIR=
Nilesh K.
la source
10
La variable existe toujours, mais elle contient une chaîne vide, comme vous pouvez le voir dans la sortie de la envcommande. Il se peut que l'application qui utilise la variable ne fasse pas de distinction entre une variable d'environnement inexistante et vide.
Palec
1
oui, il contiendra, c'était juste pour supprimer la valeur et non pour supprimer la variable. Mais oui, on peut utiliser - unset GNUPLOT_DRIVER_DIR.
Nilesh K.
Cela ne fonctionne pas dans le cas de la variable PAGER. J'ai essayé de désactiver mon paramètre PAGER avec export PAGER=, mais cela a complètement désactivé la pagination - toutes mes pages de manuel ont été transférées directement sur le terminal. unset PAGERa fait l'affaire, le ramenant au comportement par défaut.
Chad
1

Comme mentionné dans les réponses ci-dessus, cela unset GNUPLOT_DRIVER_DIRdevrait fonctionner si vous avez utilisé exportpour définir la variable. Si vous l'avez installé de façon permanente ~/.bashrcou ~/.zshrcsimplement en le supprimant, cela fonctionnera.

Rishabh Bohra
la source