web-dev-qa-db-fra.com

Comment ajouter des variables d'environnement?

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 affiche toutes les variables, THEVAR étant la dernière, mais un autre appel à env ne montre plus THEVAR - env | grep THEVAR ne renvoie rien.

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

Je sais que je fais quelque chose de mal, je sais que cela 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.

328
huff

Pour définir la variable niquement pour le shell actuel:

VARNAME="my value"

Pour le définir pour le shell actuel et tous les processus démarré depuis le shell actuel:

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

Pour le définir définitivement pour toutes les futures sessions bash, ajoutez cette ligne à votre fichier .bashrc dans votre répertoire $HOME.

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 mot clé export ici.

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

512
Michał Šrajer

Pour définir une variable d'environnement une fois, utilisez la commande exportdans l'invite, mais pas dans un script Shell:

$ export THEVAR=/example

La variable sera définie pour le reste de la session Shell ou jusqu'à ce qu'elle soit désactivée.

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

Pour définir une variable d'environnement à partir d'un script, utilisez la commande exportdans le 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 la réponse suivante: https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and- sourcing-a-bash-script/176788 # 176788

27
lesmana

Pour ajouter de façon 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. Editez le fichier texte qui vient d'être ouvert:
    par exemple. si vous voulez ajouter FOO=bar, écrivez simplement FOO=bar dans une nouvelle ligne
  5. Sauvegarde le
  6. Une fois enregistré, déconnectez-vous et reconnectez-vous.
  7. Vos modifications requises sont effectuées.
18
user355501

Pour que les modifications d'environnement/var persistent après la fin du script, vous devez utiliser source ./script.sh ou la notation abrégée de 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, en appelant exit 0, il mettra fin à votre session de terminal/shell en cours.

7
m0bl

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
3
Shital Shah