Puisque .bashrc
est plus "générique" (en ce sens que .profile
le trouve), pourquoi la procédure "include ~/bin
to path" n'est pas à l'intérieur de .bashrc
? Pourquoi l'utilisateur ne le voudrait-il pas dans un shell sans connexion? (Surtout de nos jours, où les shells non connectés sont plus communs *.)
Je sais que je peux faire manuellement un tel changement, mais je veux savoir s'il y a une raison.
* Je ne peux pas le prouver, mais je pense que c'est le cas.
~/.bashrc
et /etc/bash.bashrc
sont exécutés à chaque démarrage d'un shell bash
interactif.
En revanche, ~/.profile
et /etc/profile
sont exécutés à chaque fois que login Shell est démarré. Ainsi, il ne doit pas nécessairement s'agir d'un shell bash
, mais d'un shell de connexion (et de nombreuses instances de shell bash
ne sont pas shell de connexion).
bash
est un shell dans lequel le programme Shell qui le fournit est bash
, plutôt que d'autres programmes, tels que dash
.Par conséquent, placer une recommandation qui ajoute des entrées à PATH
dans un fichier bashrc
aurait pour effet:
Ne faites rien lorsque le shell n'est pas bash
, ce qui est souvent le cas. Par exemple, PATH
ne serait pas modifié lorsque vous vous connectez à une session de connexion graphique. N'oubliez pas que PATH
n'est pas utilisé uniquement par les programmes en ligne de commande.
Ajoutez-le encore et encore en présence de shells imbriqués bash
. Ainsi, si vous démarrez un shell dans un shell - ce qui est très courant pour diverses raisons -, vous aurez plusieurs entrées ~/bin
empilées sur votre PATH
. Cela rend la variable d'environnement PATH
difficile à lire et diminue parfois les performances.
Ce serait indésirable. Ainsi, il serait mauvais de mettre cela dans un fichier bashrc
; il appartient vraiment à ~/.profile
. ~/.profile
est le bon endroit pour:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Les shells autres que de connexion ont des shells de connexion (ou quelque chose qui se comporte comme un shell de connexion) en tant que parent et héritent de la plupart de leurs variables d'environnement, y compris PATH
, de ce shell de connexion. Donc, mettre des commandes de modification de chemin dans ~/.profile
nécessite que vous vous déconnectiez et vous reconnectiez pour qu'elles soient efficaces, mais cela affecte également l'environnement des shells non connectés (ainsi que celui des programmes qui ne sont pas des shells, puisque chaque programme obtient son propre ensemble de variables d’environnement - appelé son "environnement" - hérité de son processus parent).
C'est parce que traditionnellement les variables d'environnement vont seulement dans /etc/profile
ou .profile
. Le fichier bashrc
contient des éléments tels que des alias, des paramètres d'invite, des options de shell, etc. (c'est-à-dire des éléments directement liés au shell).