104 votes

Pourquoi Mac OS X ne met pas en source ~/.bashrc ?

J'ai trouvé beaucoup de gens qui cherchaient à comprendre pourquoi une instruction similaire à celle-ci :

Put X to your ~/.bashrc and you can do Y

ne fonctionnent pas.

Il s'avère toujours que les fichiers de démarrage de bash de Mac OS X (ou le Bash de Mac lui-même) ne génèrent pas le fichier ~/.bashrc, que ce soit dans l'interpréteur de commandes de connexion ou dans un interpréteur de commandes créé à partir du système de fenêtres - comme l'application Terminal dans Mac OS X).

Pourquoi cela, alors que tous les autres systèmes Unix-like avec Bash avec lesquels j'ai travaillé auparavant le faisaient ?

PS :

J'ai trouvé ce que Bash lui-même dit à propos des fichiers de démarrage (ce qui pourrait être utile) :

Lorsque Bash est invoqué en tant que shell de connexion interactif, ou en tant que non interactif avec l'option --login, il lit et exécute d'abord les exécute 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 à partir de la première qui existe et qui est lisible. L'option --noprofile peut être être utilisée au démarrage de l'interpréteur de commandes pour inhiber ce comportement.

Source : http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files

95voto

yoliho Points 340

Dans OSX, le terminal démarre par défaut une session de connexion et lit donc .bash_profile etc. (Le processus de connexion de l'interface graphique qui demande votre nom et votre mot de passe n'utilise pas de shell scripts et ne démarre aucun shell ; tout se fait à partir de launchd et de l'espace de travail).

Sur d'autres Unices, xterm exécute un shell de non connexion par défaut, donc ils lisent .bashrc comme les scripts qui vous présentent votre mot de passe etc à la connexion appellent la session de connexion et tous les terminaux sont des sous processus de ceci et héritent de l'environnement shell.

Extrait du document GNU auquel vous faites référence

Appelé comme un shell interactif sans login

Lorsqu'un shell interactif qui n'est pas un shell de connexion est lancé, Bash lit et exécute les commandes de ~/.bashrc, si ce fichier existe. Ce Ceci peut être empêché en utilisant l'option --norc. L'option --rcfile file forcera Bash à lire et à exécuter les commandes à partir du fichier au lieu de ~/.bashrc.

Donc, typiquement, votre ~/.bash_profile contient la ligne

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi 

après (ou avant) toute initialisations spécifiques à la connexion.

19voto

nohillside Points 82672

bash seulement lire .bashrc pour non-login coquilles :

Lorsqu'un shell interactif qui n'est pas un shell de connexion est lancé, bash lit et exécute les commandes à partir de ~/.bashrc, si ce fichier existe. Ceci peut être empêché en utilisant l'option --norc. L'option --rcfile file forcera bash à lire et exécuter les commandes du fichier au lieu de ~/.bashrc.

Comme le terminal commence bash en tant que shell de connexion (exécuter w pour voir que le bash sont exécutées en tant que -bash ), .bashrc n'est jamais lu automatiquement.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X