1898 votes

Comment puis-je supprimer une variable d'environnement exportée ?

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 veux supprimer la variable d'environnement GNUPLOT_DRIVER_DIR. Comment puis-je y parvenir ?

3 votes

Pour ceux qui cherchent comment faire cela dans le shell Fish, consultez stackoverflow.com/questions/30703860/… (même si cette question ne concerne pas un shell spécifique).

3001voto

Peder Klingenberg Points 4675

unset est la commande que vous recherchez.

unset GNUPLOT_DRIVER_DIR

7 votes

Mais cela ne fonctionne que pour une session, et pour le supprimer définitivement? ou peut-être chercher où la variable est définie, afin de pouvoir la supprimer?

42 votes

Cela devrait fonctionner par instance de terminal. En général, chaque fois qu'une fenêtre de terminal est ouverte, elle chargera des variables à partir de divers endroits tels que ~/.bashrc, ~/.profile, etc. Toute variable définie dans une instance de terminal ne se transférera pas vers une autre. Si vous avez une variable qui semble être définie automatiquement à chaque ouverture de terminal, essayez de parcourir les différents fichiers cachés de votre répertoire personnel pour la trouver. Ou, pour voir où elle est définie, essayez "grep -r ~" où est le nom de la variable. Cela peut prendre un certain temps si vous avez beaucoup de fichiers dans votre répertoire personnel.

2 votes

Cela supprime également la variable du shell. Est-ce que la seule façon de unexport est de faire T="$MYVAR"; unset MYVAR; MYVAR="$T"; unset T ?

202voto

Eric Leschinski Points 14289

Guide pas à pas de la création et de la suppression d'une variable d'environnement en Bash :

Vérifiez si la variable DUALCASE existe (aucune sortie) :

env | grep DUALCASE

Elle n'existe pas, donc créez la variable et exportez-la :

DUALCASE=1
export DUALCASE

Vérifiez si elle est là :

env | grep DUALCASE

Sortie :

DUALCASE=1

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

unset DUALCASE

Vérifiez s'il est toujours là (sortie vide) :

env | grep DUALCASE

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

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

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

CAN="chuck norris"
set | grep CAN

Sortie :

CAN='chuck norris'

env | grep CAN # Sortie vide

exec bash
set | grep CAN
env | grep CAN # Sortie vide

La commande exec bash a effacé toutes les variables locales, mais pas les variables d'environnement.

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

export DOGE="so wow"
env | grep DOGE

Sortie :

DOGE=so wow

env -i bash
env | grep DOGE # Sortie vide

La commande env -i bash a effacé toutes les variables d'environnement pour les réinitialiser à la connexion.

11 votes

Peut-être echo $VARIABLE est mieux que env | grep VARIABLE, c'est plus léger car cela ne nécessite pas d'afficher toutes les variables avant d'envoyer sa sortie à un autre processus (grep). De plus, env | VARIABLE pourrait attraper plus d'une variable correspondant au même motif. De plus, echo $VARIABLE permet de compléter le nom de la variable en appuyant sur (si elle existe, ce qui peut aussi être un indice de ce que vous voulez faire).

11 votes

'env | grep VARIABLE' est mieux que 'echo $VARIABLE' parce que je peux dire qu'il est vraiment parti

8 votes

@RodrigoGurgel, echo $VARIABLE ne vous indique pas si la VARIABLE est une variable shell (ici appelée "variable locale") ou une variable d'environnement, c'est toute la raison de ce guide.

15voto

G Eitan Points 81

La question originale ne mentionne pas comment la variable a été définie, mais :

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

  1. set x = "quelque chose"
  2. setenv x "quelque chose"

La différence de comportement est que les variables définies avec la commande setenv sont automatiquement exportées vers un sous-shell alors que les variables définies avec set ne le sont pas.

Pour annuler une variable définie avec set, utilisez

unset x

Pour annuler une variable définie avec setenv, utilisez

unsetenv x

Note : dans tous les cas ci-dessus, je suppose que le nom de la variable est 'x'.

Crédits :

1 votes

Super ajout concernant les différences entre set / setenv par rapport aux sous-shell !

9voto

Nilesh K. Points 155

Cela peut également fonctionner.

export GNUPLOT_DRIVER_DIR=

16 votes

La variable existe toujours, mais elle contient une chaîne vide, comme vous pouvez le voir dans la sortie de la commande env. Il se peut simplement que l'application qui utilise la variable ne fasse pas la distinction entre une variable d'environnement inexistante et vide.

1 votes

Oui, cela contiendra, c'était juste pour supprimer la valeur sans supprimer la variable. Mais oui, on peut utiliser - unset GNUPLOT_DRIVER_DIR.

0 votes

Cela ne fonctionne pas dans le cas de la variable PAGER. J'ai essayé de supprimer mon réglage PAGER avec export PAGER=, mais cela a simplement désactivé la pagination entièrement - toutes mes pages man se sont simplement affichées directement dans le terminal. unset PAGER a résolu le problème, le ramenant à son comportement par défaut.

9voto

Rishabh Bohra Points 80

Comme mentionné dans les réponses ci-dessus, unset GNUPLOT_DRIVER_DIR devrait fonctionner si vous avez utilisé export pour définir la variable. Si vous l'avez défini de manière permanente dans ~/.bashrc ou ~/.zshrc, il suffira de le supprimer de là.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X