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.
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.
Pour définir une variable d'environnement une fois, utilisez la commande export
dans 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 export
dans 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 export
dans le script, puis source
le 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
Pour ajouter de façon permanente une nouvelle variable d'environnement dans Ubuntu (testé uniquement dans 14.04), procédez comme suit:
Sudo -H gedit /etc/environment
FOO=bar
, écrivez simplement FOO=bar
dans une nouvelle lignePour 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.
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