Comment réparer le terminal ne chargeant pas ~ / .bashrc sur OS X Lion [fermé]

178

Chaque fois que j'ouvre un nouvel onglet dans Terminal en utilisant Cmd+ T, il ouvre bash dans le même répertoire, que l'onglet précédent. Cela fonctionne bien lorsque je suis dans le ~répertoire, mais si je suis ailleurs, j'obtiens une erreur de chargement.bashrc

Last login: Sat Oct 15 21:10:00 on ttys002
-bash: .bashrc: No such file or directory
Jakub-Arnolds-MacBook-Pro:projects darth$ 

Il semble être .bashrcchargé via un chemin relatif et non absolu, car si je le fais source ~/.bashrc, tout fonctionne bien.

bashrc chargé

Je pense que c'est un problème lié à OS X Lion, car avant la mise à niveau de Snow Leopard, je n'avais pas le même problème. Mais cela peut être dû au fait que le terminal s'ouvre toujours à ~, je ne me souviens pas s'il a essayé d'ouvrir le même répertoire.

Cependant, la question reste la même, comment puis-je charger le terminal ~/.bashrcvia un chemin absolu et non relatif?

Jakub Arnold
la source
1
cette question doit être déplacée vers apple.SE (si possible?), non fermée.
Sparr
@Sparr Je suis totalement d'accord avec vous, mais les modérateurs ne proposent que des questions plus récentes et non plus anciennes. Voir la discussion ici
рüффп

Réponses:

359

Le terminal ouvre un shell de connexion. Cela signifie, ~/.bash_profilesera exécuté, ~/.bashrcnon.

La solution sur la plupart des systèmes consiste à "exiger" le ~/.bashrcdans le ~/.bash_profile: il suffit de mettre cet extrait de code dans votre ~/.bash_profile:

[[ -s ~/.bashrc ]] && source ~/.bashrc
ckruse
la source
8
Quelqu'un pourrait-il expliquer ce qu'il [[ -s /file/path ]]fait? Essayer d'expliquer Google n'est pas trop facile.
Shane
18
From man bash: -s fichier Vrai si le fichier existe et a une taille supérieure à zéro.
ckruse
1
"Le terminal ouvre un shell de connexion" - quels sont les autres types de shells OS? Où puis-je trouver plus de documentation à ce sujet?
dknight
4
Il existe des «shells interactifs» et des «shells de connexion». Votre manuel bash ( man bash) en parle et l'explique, chapitre INVOCATION (il suffit de rechercher INVOCATIONaprès avoir appelé man bashen tapant /INVOCATION)
ckruse
3
Je ne vois pas comment une question relative à une situation d'exécution de code, résolue par une ligne de code, est "hors sujet" pour un site de questions de programmation.
Kheldar
26

Changement de nom .bashrcà .profile(ou de liaison souple celui - ci à l'ancien) devrait également faire l'affaire. Regardez ici .

scorpiodawg
la source
Ou vous pouvez les lier symboliquement: cd && ln -s ./.bashrc ./.profileNotez que les liens symboliques sont sensibles concernant le chemin du fichier, je pense que l'utilisation de la syntaxe ci-dessus fonctionne, mais pour être sûr que vous pouvez utiliser des chemins absolus dans tous les cas.
Steve Benner
1
Euh non? Ces fichiers ont des objectifs différents. Si vous avez la syntaxe Bash, .profilevous casserez la règle sh.
tripleee
14

J'ai ce qui suit dans mon ~/.bash_profile:

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

Si j'avais à la .bashrcplace ~/.bashrc, je verrais le même symptôme que vous voyez.

Keith Thompson
la source