La logique de configuration de bash elle-même n'est pas follement compliquée et est expliquée dans d'autres réponses dans cette page, sur serverfault et dans de nombreux blogs. Le problème est cependant le suivant ce que les distributions Linux font de bash Je parle de la manière complexe et variée dont ils configurent bash par défaut. http://mywiki.wooledge.org/DotFiles mentionne brièvement certaines de ces bizarreries. Voici un exemple de trace sur Fedora 29, qui montre quels fichiers sont à l'origine de quel(s) autre(s) fichier(s) et dans quel ordre pour un scénario très simple : se connecter à distance avec ssh et ensuite démarrer un autre sous-shell :
ssh fedora29
-bash # login shell
/etc/profile
| /etc/profile.d/*.sh
| /etc/profile.d/sh.local
| /etc/bashrc
~/.bash_profile
| ~/.bashrc
| /etc/bashrc
|
|
$ bash # non-login shell
~/.bashrc
/etc/bashrc
/etc/profile.d/*.sh
La logique la plus complexe de Fedora se trouve dans /etc/bashrc
. Comme on l'a vu plus haut /etc/bashrc
est un fichier que bash lui-même ne connaît pas, je veux dire pas directement. Le système de Fedora /etc/bashrc
teste si :
- il est sourcé par un login Shell,
- il est fourni par un Shell interactif,
- il a déjà été sourcé
... et fait ensuite des choses complètement différentes en fonction de celles-ci.
Si vous pensez pouvoir vous souvenir du graphique ci-dessus, alors tant pis car c'est loin d'être suffisant : ce graphique ne décrit qu'un seul scénario, des choses légèrement différentes se produisent lors de l'exécution de scripts non interactifs ou lors du démarrage d'une session graphique. J'ai omis ~/.profile
. J'ai omis bash_completion
scripts. Pour des raisons de compatibilité ascendante, invoquer bash en tant que /bin/sh
au lieu de /bin/bash
modifie son comportement. Qu'en est-il de zsh et des autres shells ? Et bien sûr, les différentes distributions de Linux font les choses différemment, par exemple Debian et Ubuntu sont livrés avec une version non standard de bas h, il a une ou plusieurs personnalisations spécifiques à Debian. Il recherche notamment un fichier inhabituel : /etc/bash.bashrc
. Même si vous vous en tenez à une seule distribution Linux, elle évolue probablement au fil du temps. Attendez : nous n'avons même pas touché à macOS, FreeBSD, ... Enfin, ayons une pensée pour les utilisateurs coincés par les façons encore plus créatives dont leurs administrateurs ont configuré le système qu'ils doivent utiliser.
Comme le montre le flot incessant de discussions sur ce sujet, c'est une cause perdue. Tant que vous souhaitez simplement ajouter de nouvelles valeurs, quelques "essais et erreurs" suffisent généralement. Le vrai plaisir commence lorsque vous voulez modifier dans un fichier (utilisateur) quelque chose de déjà défini dans un autre (dans /etc). Préparez-vous alors à passer du temps à développer une solution qui ne sera jamais portable.
Pour une dernière partie de plaisir, voici le "graphique source" pour le même scénario simple sur Clear Linux en juin 2019 :
ssh clearlinux
-bash # login shell
/usr/share/defaults/etc/profile
| /usr/share/defaults/etc/profile.d/*
| /etc/profile.d/*
| /etc/profile
~/.bash_profile
|
|
$ bash # non-login shell
/usr/share/defaults/etc/bash.bashrc
| /usr/share/defaults/etc/profile
| | /usr/share/defaults/etc/profile.d/*
| | /etc/profile.d/*
| | /etc/profile
| /etc/profile
~/.bashrc
3 votes
Voir aussi cette question similaire à ubuntu.stackexchange.com/questions/1528/bashrc-or-bash-profile
1 votes
Si vous voulez une explication plus complète qui implique également
.profile
Jetez un coup d'œil à cette question : superuser.com/questions/789448/0 votes
Cette réponse couvre également certains aspects stackoverflow.com/questions/415403/
0 votes
La réponse courte est : ceci est spécifique à la distribution. Réponse plus longue ci-dessous.