Comment ajouter des variables d'environnement?

365

J'utilise Ubuntu 11.04. J'utilise le terminal pour démarrer une session bash et je souhaite ajouter une variable d'environnement:

$r@hajt:~$ env THEVAR=/example

Mais ça ne marche pas. Il montre toutes les variables avec THEVAR étant la dernière, mais un autre appel à envne montre THEVARplus - env | grep THEVARne renvoie rien.

De même, les scripts avec export ( export THEVAR=/example) ou d'autres variables assignments ( THEVAR=/example) n'ajoutent pas la variable d'environnement.

Je sais que je fais quelque chose de mal, je sais que ça devrait être quelque chose de simple, mais je ne trouve pas quoi.

MISE À JOUR: Le sens réel de ma question était celui-ci: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell

(Quoi qu'il en soit, je choisirai la réponse la plus votée et laisserai le titre modifié - ce n'était pas ce que je demandais)

env exécute un programme dans un environnement modifié, puis rejette toutes les modifications.

souffler
la source
1
Lorsqu'il est défini / exporté dans .bashrc, cela fonctionne correctement.
Huff
1
Que diriez- THEVAR=/examplevous
Oleh Prypin
2
L'autre concerne les variables globales, celle-ci n'ajoute pas une telle limitation. Je le garderais séparé.
Lekensteyn

Réponses:

571

Pour définir une variable uniquement pour le shell actuel:

VARNAME="my value"

Pour le définir pour le shell actuel et tous les processus démarrés à partir du shell actuel:

export VARNAME="my value"      # shorter, less portable version

Pour le définir de manière permanente pour toutes les futures sessions bash, ajoutez cette ligne à votre .bashrcfichier dans votre $HOMErépertoire.

Pour le définir de manière permanente et à l'échelle du système (tous les utilisateurs, tous les processus), ajoutez la variable set dans / etc / environment:

sudo -H gedit /etc/environment

Ce fichier accepte uniquement les affectations de variables telles que:

VARNAME="my value"

N'utilisez pas le exportmot clé ici.

Vous devez vous déconnecter de l'utilisateur actuel et vous reconnecter pour que les modifications des variables d'environnement aient lieu.

Michał Šrajer
la source
29
Shell config files such as ~/.bashrc, ~/.bash_profile, and ~/.bash_login are often suggested for setting environment variables. While this may work on Bash shells for programs started from the shell, variables set in those files are not available by default to programs started from the graphical environment in a desktop session. help.ubuntu.com/community/EnvironmentVariables
SudoSURoot
1
@ Mr.Hyde oui, c'est probablement un endroit raisonnable
Michał Šrajer
1
@BharadwajRaju car sur certains anciens systèmes UNIX, on ne peut exporter que les variables déjà définies. Ancien Solaris et HP-UX par exemple.
Michał Šrajer
1
Une fois que vous avez défini la variable d'environnement, comment puis-je la visualiser rapidement pour vérifier qu'elle est définie?
Rod
1
@Rodecho $myvar
Qwerty
29

Pour définir une variable d'environnement une fois, utilisez la exportcommande dans l'invite, et non dans un script shell:

$ export THEVAR=/example

La variable sera définie pour le reste de la session shell ou jusqu’à sa suppression.

Pour définir une variable d'environnement à chaque fois, utilisez la exportcommande dans le .bashrcfichier (ou le fichier d'initialisation approprié pour votre shell).

Pour définir une variable d'environnement à partir d'un script, utilisez la exportcommande du script, puis sourcele script. Si vous exécutez le script, cela ne fonctionnera pas.

Pour une explication de la différence entre sourcing et exécution, voir cette réponse: https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-et-sourcing-a- bash-script / 176788 # 176788

lesmana
la source
4
Comment puis-je le faire fonctionner uniquement en exécutant le script? Sans sourcing.
Mithril
19

Pour ajouter de manière permanente une nouvelle variable d’environnement dans Ubuntu (testé uniquement dans 14.04), procédez comme suit:

  1. Ouvrir un terminal (en appuyant sur CtrlAltT)
  2. sudo -H gedit /etc/environment
  3. Tapez votre mot de passe
  4. Éditez le fichier texte qui vient d'être ouvert:
    par exemple, si vous voulez ajouter FOO=bar, écrivez simplement FOO=bardans une nouvelle ligne
  5. Sauvegarde le
  6. Une fois enregistré, déconnectez-vous et reconnectez-vous.
  7. Vos modifications requises sont effectuées.
utilisateur355501
la source
5
J'ai nettoyé votre réponse en supprimant les éléments les plus dangereux concernant sudo gedit(voir askubuntu.com/questions/270006/… ) et chmod 777. Ce dernier ne devrait jamais être fait sur un fichier de configuration système.
muru
C'est une réponse correcte pour certains cas. Toutes les sessions, qu'elles soient utilisateur ou non, obtiendront la valeur des variables définies ici. Il est important de noter que bien que cela puisse ressembler à un script shell, ce n'est pas le cas. Il vous permet uniquement de définir des variables d'environnement (par opposition à l'utilisation de fonctions shell telles que ifou test).
Tom Harrison Jr
Si barre est une chaîne, devrais-je la mettre entre guillemets? Comme Foo="bar"?
blue_chip
@blue_chip Non, fonctionne sans guillemets.
Cliquez vote positif
4
@blue_chip pour les variables d'environnement, tout est une chaîne. Vous n'avez besoin que de guillemets quand il contient des espaces.
Ruslan
8

Pour que les modifications de l'environnement / var persistent après la fin du script, vous devez utiliser source ./script.shla notation abrégée pour la source, ".", Comme. ./script.sh

Source exécutera les commandes du script comme si vous les aviez saisies ... cela modifiera donc certains aspects du script, tels que la sortie ... donc si votre script vérifie quelque chose et décide de quitter si faux, par exemple, via un appel exit 0, il mettra fin à votre session de terminal / shell en cours.

m0bl
la source
Ceci est une très vieille question qui a déjà une réponse acceptée et quelques autres ... Considérez, répondant à des questions plus récentes s'il vous plaît ...
NerdOfCode
3
@NerdOfCode cette réponse répond à un problème qui reste d'actualité et aucune des autres réponses, y compris celle acceptée, ne le mentionne, à ma connaissance. donc ceci est encouragé
Zanna
1
C'est exactement ce que je cherchais. J'avais besoin de voir en dehors du script les variables exportées à partir du script.
albanx
5

Si vous faites des choses via un script, un moyen simple de définir une variable d'environnement de manière permanente est placé sous l'instruction dans votre script,

if [[ ! -d "$MyVar" ]]; then 
    export MyVar="abc"
    echo 'export MyVar="abc"' >> ~/.bashrc
fi

Si vous devez évaluer des expressions telles que pwd, vous pouvez utiliser ceci, par exemple,

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc
Shital Shah
la source
1

Je sais que c'est assez tard, mais si vous souhaitez ajouter une variable d'environnement pour tous les utilisateurs (par exemple, l'utilisation de JAVA), vous pouvez procéder comme suit:

1) Ouvrez /etc/bash.bashrcavec nano (vous pouvez utiliser n’importe quel éditeur, je ne préfère pas le VIM, c’est le pire problème en termes de convivialité - rien de personnel).

2) Ajouter au fichier:

export VAR=path export PATH=$PATH:/bin 3) (Mieux si vous pouvez faire rebondir la boîte) - ou ouvrez simplement une nouvelle session SSH et confirmez en utilisant la commande `env '.

MAIS SI vous voulez que chaque utilisateur ait un paramètre distinct pour cela, vous devez modifier (scripté) le .bashrcfichier sous ~/.bashrc(ou /home/$USER/si vous êtes nouveau sur les systèmes Linux)

ha9u63ar
la source