J'utilise Linux Mint. Mon shell de connexion (cat /etc/passwd | grep myUserName
) est bash.
Après avoir démarré mon environnement de bureau graphique et exécuté un émulateur de terminal à partir de celui-ci, je peux voir que .bash_profile
n'est pas sourcée (vars d'environnement qui sont export
ed in it are unset). Mais si je me connecte depuis une console texte (ctrl +alt +F1 ) ou exécutez manuellement bash -l
depuis l'émulateur de terminal, .bash_profile
fonctionne bien.
Ai-je tort quand je pense que .bash_profile
doit être sourcé au démarrage de X et tous les export
'ed vars devrait être disponible dans le terminal, exécuté à partir de X ?
PS Tout placer dans .bashrc
et le sourcer à partir de .bash_profile
n'est pas une bonne idée (https://stackoverflow.com/questions/902946/) :les éléments d'environnement ne doivent être sourcés qu'une seule fois.
Réponse acceptée :
Le fichier ~/.bash_profile
est lu par bash lorsqu'il s'agit d'un shell de connexion. C'est ce que vous obtenez lorsque vous vous connectez en mode texte.
Lorsque vous vous connectez sous X, les scripts de démarrage sont exécutés par /bin/sh
. Sur Ubuntu et Mint, /bin/sh
est dash, pas bash. Dash et bash ont tous les deux les mêmes fonctionnalités de base, mais dash s'en tient à ces fonctionnalités de base afin d'être rapide et petit, tandis que bash ajoute de nombreuses fonctionnalités au prix de davantage de ressources. Il est courant d'utiliser dash pour les scripts qui n'ont pas besoin des fonctionnalités supplémentaires et bash pour une utilisation interactive (bien que zsh ait beaucoup de fonctionnalités plus intéressantes).
La plupart des combinaisons de gestionnaire d'affichage (le programme dans lequel vous tapez votre nom d'utilisateur et votre mot de passe) et d'environnement de bureau lisent ~/.profile
à partir des scripts de connexion dans /etc/X11/Xsession
, /usr/bin/lightdm-session
, /etc/gdm/Xsession
ou selon le cas. Mettez donc vos définitions de variable d'environnement dans ~/.profile
. Assurez-vous de n'utiliser que la syntaxe prise en charge par le tiret.
Alors, que mettre où ?
-
Un bon
.bash_profile
charge.profile
, et charge.bashrc
si le shell est interactif.. ~/.profile if [[ $- == *i* ]]; then . ~/.bashrc; fi
-
Dans
.profile
, mettre des définitions de variables d'environnement et d'autres paramètres de session tels queulimit
. - Dans
.bashrc
, placez les paramètres interactifs bash tels que les alias, les fonctions, la complétion, les raccourcis clavier (qui ne sont pas dans.inputrc
), …