Traditionnellement, l'endroit pour définir des variables d'environnement par utilisateur sur les systèmes Unix est ~/.profile
. Ce fichier est lu par le shell de connexion (c'est-à-dire le programme démarré lorsque vous vous connectez et dans lequel vous pouvez taper des commandes), à condition que le shell de connexion soit un shell compatible Bourne.
Bash est un shell compatible Bourne. Lorsqu'il est invoqué en tant que shell de connexion, il lit ~/.bash_profile
si ce fichier existe et ~/.profile
s'il ~/.bash_profile
n'existe pas.
En règle générale, si vous tapez votre mot de passe en mode texte (par exemple, sur une console texte ou à distance avec ssh), le shell que vous obtenez est un shell de connexion.
Cependant, si vous tapez votre mot de passe dans un programme graphique et que vous vous connectez à un environnement graphique, cela contourne le shell de connexion normal. La .profile
lecture dans ce cas dépend de la configuration de la session graphique; par exemple, il varie entre les distributions Linux, entre les gestionnaires d'affichage et entre les environnements de bureau. Parfois, l'un des programmes de la chaîne appelle explicitement un shell de connexion; parfois l'un des programmes lit explicitement ~/.profile
; et parfois rien de tout cela ne se produit et ~/.profile
n'est pas lu.
Pour donner un exemple de la variabilité, pour autant que je sache d'un rapide coup d'œil aux scripts impliqués, sur Ubuntu 10.04: si vous vous connectez avec kdm ou lxdm, ~/.bash_profile
est lu s'il existe, et ~/.profile
sinon; si vous vous connectez avec gdm, seul ~/.profile
est lu; si vous vous connectez avec xdm, ~/.profile
n'est pas lu.
Tous les systèmes que je connais fournissent un moyen de définir des variables d'environnement par utilisateur. Malheureusement, il n'y a pas de réponse générale.
Notez que parfois vous verrez des recommandations pour définir des variables d'environnement dans ~/.bashrc
, ou démarrer un shell de connexion dans chaque terminal dans un environnement GUI. Les deux sont de mauvaises idées; l'une des raisons est le problème que vous avez rencontré, à savoir que vos variables d'environnement n'étaient disponibles que dans les programmes démarrés via un terminal, et non dans les programmes démarrés directement avec une icône ou un menu ou un raccourci clavier.
.profile
est lu lorsque vous vous connectez. La mise en place de variables d'environnement.bashrc
ne fonctionne pas, et votre scénario illustre cela: l'application (vraisemblablement GUI) qui exécute ce shell devrait avoir vos variables d'environnement, mais si vous les définissez dans.bashrc
, cela ne fonctionne pas '' t.La réponse définitive se trouve dans la section de la page de manuel bash sur Bash Startup Files . "Lorsqu'un shell interactif qui n'est pas un shell de connexion est démarré, Bash lit et exécute les commandes de ~ / .bashrc, si ce fichier existe."
Les réponses à vos autres questions indiquent que eshell ne fonctionne pas réellement
bash
. Emacseshell
ne l'est pasbash
. En supposant queeshell
cela se chargerait.bashrc
est aussi défectueux que de supposerzsh
oucsh
se chargerait.bashrc
. C'est une coquille différente.Je vois deux options:
bash
et le code elisp poureshell
.Vous pourriez également être intéressé par la discussion sur l' ajout d'un répertoire à un chemin sans doublons .
la source
La définition de votre PATH dans votre ~ / .profile devrait simplement fonctionner. Ce fichier est lu lors de la connexion par chaque shell compatible POSIX ou similaire à Bourne que je connais, y compris bash. Si vous apportez des modifications à ce fichier, vous devrez vous déconnecter et vous reconnecter pour que les modifications prennent effet. Puisque PATH fait partie de l'environnement de votre processus de connexion, il doit être exporté vers chaque shell que vous démarrez par la suite.
la source