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.bashrcet~/.bashrc, si ces fichiers existent. Cela peut être inhibé en utilisant l'--norcoption.L'
--rcfileoption de fichier forcera bash à lire et à exécuter des commandes à partir du fichier au lieu de/etc/bash.bashrcet~/.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'
--loginoption, 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_loginet~/.profile, dans cet ordre, et lit et exécute les commandes de la première qui existe et est lisible.Cette
--noprofileoption 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_profileou ~.profileetc. 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 ~/.bashrcvont é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?