web-dev-qa-db-fra.com

Pourquoi les variables d'environnement ajoutées à .profile n'apparaissent-elles pas à l'écran?

Je suis sous Ubuntu 12.04

J'ai ajouté

export LD_LIBRARY_PATH=/home/dspies/workspace/hdf5-1.8.11-linux-shared/lib

au profil

mais quand je me connecte et ouvre le terminal et met echo $LD_LIBRARY_PATH il n'y a rien.

Quand je passe à ctrl-alt-F1 et que je me connecte, echo $LD_LIBRARY_PATH donne

/home/dspies/workspace/hdf5-1.8.11-linux-shared/lib

mais alors quand je lance screen, echo $LD_LIBRARY_PATH à partir de l'écran est à nouveau vide

Dans quelles circonstances puis-je m'attendre à ce que les variables d'environnement de .profile soient définies? (curieusement, il semble que toutes les modifications apportées à PATH dans .profile apparaissent toujours)

EDIT: Désolé, je suppose que je n’ai pas précisé ce que je voulais vraiment savoir, c’est: comment définir une variable d’environnement que je veux définir n'importe où (par exemple, à l’écran, dans le terminal, lorsque je me connecte, et quand Je ssh dans)?

3
dspyz

La réponse est:

Je devrais les mettre en .pam_enviornment

Voir ici https://help.ubuntu.com/community/EnvironmentVariables

J'imagine que c'est l'une des questions les plus courantes, je ne sais pas pourquoi personne ne m'a donné la bonne réponse quand j'ai posé cette question.

4
dspyz

Du manuel de Bash:

Lorsque bash est appelé en tant que shell de connexion interactif ou non interactif avec l'option --login, il lit et exécute d'abord les commandes du fichier/etc/profile, si ce fichier existe. Après avoir lu ce fichier, il recherche ~/.bash_profile, ~/.bash_login et ~/.profile, dans cet ordre, puis lit et exécute les commandes à partir de la première qui existe et est lisible.

Cela signifie que si vous avez .bash_profile ou .bash_login dans votre dossier personnel, bash ne lira pas le contenu de votre .profile. De plus, lorsqu'il n'est pas exécuté dans un shell de connexion interactif, .profile ne sera pas lu non plus.

3
daniel kullmann
echo $0

renverra le nom du script en cours d'exécution, lorsque cette commande sera exécutée dans un script Shell. Dans un terminal, le type de shell utilisé sera renvoyé.

Vous utilisez bash Shell. Vous devez ajouter cette ligne

export LD_LIBRARY_PATH=/home/dspies/workspace/hdf5-1.8.11-linux-shared/lib

dans le fichier ~/.bash_profile.

EDIT:

Vous pouvez trouver les différents noms de scipt de profil de connexion pour différents shells, here

EDIT2:

Même si j’ai eu deux réponses différentes quand j’ai exécuté echo $0 sur deux machines différentes. Sur une machine, j'ai bash et sur l'autre, -bash. J'ai posé cette question ici . C'est ce que j'ai comme réponse.

Processes with a - at the beginning of arg 0 have been run via login, or by exec -l in bash.

Après avoir lu cette réponse, j’ai fait help exec et qui se lit, If the first argument is '-l', then place a dash in the zeroth arg passed to FILE, as login does.

1
thefourtheye