Question Comment ajouter des variables d'environnement?


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

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

Mais ça ne marche pas. Il montre toutes les variables avec THEVAR étant le dernier, mais un autre appel à env ne montre pas THEVAR plus- env | grep THEVAR ne renvoie rien.

De même, les scripts avec exportation (export THEVAR=/example) ou d'autres affectations de variables (THEVAR=/example) N'ajoutez 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 peux pas trouver quoi.

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

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

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


224
2017-08-27 00:22


origine


Lorsque défini / exporté dans .bashrc, cela fonctionne correctement. - huff
duplicata possible de Variable d'environnement Google Earth et $ BROWSER - Isaiah
Que diriez-vous THEVAR=/example? - Oleh Prypin
L'autre concerne les variables globales, celle-ci n'ajoute pas une telle limitation. Je le garderais séparé. - Lekensteyn
help.ubuntu.com/community/EnvironmentVariables - huff


Réponses:


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

VARNAME="my value"

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

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

Pour le définir en permanence pour toutes les prochaines sessions bash ajouter une telle ligne à votre .bashrc déposer dans votre $HOME annuaire.

Pour le définir de manière permanente, et système large (tous les utilisateurs, tous les processus) ajoutent la variable set dans / etc / environment:

sudo -H gedit /etc/environment

Ce fichier n'accepte que les affectations de variables comme:

VARNAME="my value"

Ne pas utiliser le export mot-clé ici.

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


363
2017-08-27 07:50



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
Où dois-je ajouter ma ligne spécifique?! en bas de la page .bashrc ?! - Mr.Hyde
@ Mr.Hyde oui, c'est probablement un endroit raisonnable - Michał Šrajer
Pourquoi le second est-il moins portable? - UniversallyUniqueID
@BharadwajRaju parce que sur certains anciens systèmes UNIX, on ne peut exporter que des variables déjà définies. Ancien Solaris et HP-UX par exemple. - Michał Šrajer


Pour définir une variable d'environnement une fois, utilisez le export commande dans l'invite, 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 le export commande dans le .bashrc fichier (ou le fichier d’initialisation approprié pour votre shell).

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


21
2017-08-27 07:20



Comment puis-je le faire fonctionner uniquement en exécutant le script? Sans sourcing. - Mithril


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

  1. Ouvrez un terminal (en appuyant sur CtrlAltT)
  2. sudo -H gedit /etc/environment
  3. Tapez votre mot de passe
  4. Editez le fichier texte que vous venez d'ouvrir:
    par exemple. si vous voulez ajouter FOO=bar, alors é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.

15
2017-12-07 08:45



J'ai nettoyé votre réponse en supprimant les éléments les plus dangereux 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
Ceci est une réponse correcte pour certains cas. Toutes les sessions, qu'elles soient ou non des sessions shell utilisateur, obtiendront la valeur des variables définies ici. Il est important de noter que même si cela peut ressembler à un script shell, ce n’est pas le cas - cela vous permet uniquement de définir des variables d’environnement if ou test) - Tom Harrison Jr
Si la barre est une chaîne, devrais-je la mettre entre guillemets? Comme Foo="bar"? - blue_chip
@blue_chip Non, fonctionne sans guillemets. - Click Upvote
@blue_chip pour les variables d'environnement, tout est une chaîne. Vous n'avez besoin que de citations quand il contient des espaces. - Ruslan


Pour que l’environnement / var soit modifié après la fin du script, vous devez utilisersource ./script.sh ou la notation abrégée pour la source, ".", comme . ./script.sh

Source exécutera les commandes dans le script comme si vous les avez tapées dans ... donc cela change certains aspects du script, tels que quitter ... donc si votre script vérifie quelque chose et décide de quitter si false, par exemple, via appel exit 0, il mettra fin à votre session de terminal / shell en cours.


3
2018-03-16 15:09



C'est une question très ancienne qui a déjà une réponse acceptée et quelques autres ... Pensez à répondre à des questions plus récentes s'il vous plaît ... - NerdOfCode
@NerdOfCode cette réponse résout un problème qui est toujours pertinent et pour autant que je sache, aucune des autres réponses, y compris celle qui a été acceptée, ne le mentionne ... Il existe en fait deux badges disponibles pour apporter de bonnes réponses à d'anciennes questions. - Zanna


Si vous faites des choses via un script, un moyen simple de définir la variable d’environnement de façon permanente est placé dans l’énoncé de votre script,

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

Si vous avez besoin d’évaluer des expressions comme pwd, vous pouvez l’utiliser, par exemple,

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc

1
2017-07-12 02:06