Sous Linux et, à ma connaissance, sur tous les systèmes Unix, les émulateurs de terminaux exécutent par défaut des shells interactifs sans connexion. Cela signifie que, pour bash, le shell démarré va:
Lorsqu'un shell interactif qui n'est pas un shell de connexion est démarré, bash lit et exécute les commandes à partir de
/etc/bash.bashrc
et~/.bashrc
, si ces fichiers existent. Cela peut être inhibé en utilisant l'--norc
option.L'
--rcfile
option de fichier forcera bash à lire et à exécuter des commandes à partir du fichier au lieu de/etc/bash.bashrc
et~/.bashrc
.
Et pour les coquilles de connexion:
Lorsque bash est appelé en tant que shell de connexion interactif ou en tant que shell non interactif avec l'
--login
option, il commence par lire et exécuter les commandes du fichier/etc/profile
, si ce fichier existe. Après avoir lu ce fichier, il recherche~/.bash_profile
,~/.bash_login
et~/.profile
, dans cet ordre, et lit et exécute les commandes de la première qui existe et est lisible.Cette
--noprofile
option peut être utilisée au démarrage du shell pour empêcher ce comportement.
Sur Mac OS X, cependant, le shell par défaut ( ce qui est bash) a commencé dans le terminal par défaut (Terminal.app) en fait des sources ~/.bash_profile
ou ~.profile
etc. En d' autres termes, il agit comme un shell de connexion.
Question principale : Pourquoi le shell interactif par défaut est-il un shell de connexion sous OSX? Pourquoi OSX a-t-il choisi de faire cela? Cela signifie que toutes les instructions / tutoriels pour les choses basées sur un shell qui mentionnent des changements ~/.bashrc
vont échouer sous OSX ou vice versa ~/.profile
. Pourtant, si de nombreuses accusations peuvent être portées contre Apple, le recrutement de développeurs incompétents ou idiots n'en fait pas partie. Vraisemblablement, ils avaient une bonne raison pour cela, alors pourquoi?
Sous-questions: Terminal.app exécute-t-il réellement un shell de connexion interactif ou ont-ils changé le comportement de bash? Est-ce spécifique à Terminal.app ou est-il indépendant de l'émulateur de terminal?