Oui, c'est le comportement attendu.
En bref, le comportement est le suivant:
- bash a commencé comme un shell de connexion interactif: lit
~/.profile
- bash a commencé comme un shell interactif sans connexion: lit
~/.bashrc
Lisez le manuel bash sur les fichiers de démarrage pour plus de détails.
Personnellement, je pense que ce comportement est étrange et je n'ai pas encore trouvé de rationalisation pour cette décision de conception.
Quelques explications sur la terminologie:
- Un shell interactif est un shell avec lequel vous pouvez interagir, ce qui signifie que vous pouvez y saisir des commandes. La plupart des shells que vous utiliserez sont des shells interactifs.
- Un shell non interactif est un shell avec lequel vous ne pouvez pas interagir. Les scripts shell s'exécutent dans des shells non interactifs.
- Un shell de connexion est le shell qui démarre lorsque vous vous connectez à votre système.
- Un shell sans connexion est un shell qui démarre après le processus de connexion.
La plupart des shells que vous voyez sont des shells interactifs sans connexion . Cela est particulièrement vrai si vous utilisez un environnement graphique comme gnome, car alors gnome est le "shell de connexion". Toute session bash démarrée dans gnome est un shell sans connexion. Si vous souhaitez voir un véritable shell de connexion interactif, accédez à une console virtuelle (en utilisant Ctrl+Alt+F1
), puis connectez-vous en utilisant votre nom d'utilisateur et votre mot de passe. C'est un véritable shell bash de connexion interactive. Vous pouvez revenir au shell graphique en utilisant Ctrl+Alt+F7
.
Il existe une option --login
qui fera en sorte que bash se comporte comme s'il s'agissait d'un shell de connexion même s'il était démarré après votre connexion. Configurer gnome-terminal pour démarrer bash en tant que shell de connexion signifie qu'il démarrera bash en utilisant l' --login
option.
Habituellement, vous voulez que bash lise toujours ~/.bashrc
dans un shell interactif. Voici comment je recommande de le faire:
Créez un ~/.bash_profile
fichier. Si bash est démarré en tant que shell de connexion, il recherchera d'abord ~/.bash_profile
avant de chercher ~/.profile
. Si bash le trouve, ~/.bash_profile
il ne lira pas ~/.profile
.
Mettez les lignes suivantes ~/.bash_profile
:
[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"
Maintenant, si bash est démarré en tant que shell de connexion interactif, il lira les fichiers suivants:
~/.bash_profile
~/.profile
~/.bashrc
et si bash est démarré comme un shell interactif sans connexion:
~/.bashrc
Vous devriez mettre des choses qui sont spécifiques à bash ~/.bashrc
et des choses qui ne sont pas spécifiques à bash ~/.profile
. Par exemple PATH
entre ~/.profile
et HISTCONTROL
entre ~/.bashrc
.
Notez que ce ~/.profile
n'est pas spécifique à bash. D'autres shells basés sur du texte (par exemple sh ou ksh) et des shells graphiques (gnome) lisent également ~/.profile
. C'est pourquoi vous ne devriez pas mettre de choses spécifiques à bash ~/.profile
.