如何在OS X Lion上修复终端无法加载~/.bashrc文件的问题

182
每当我使用 Cmd + T 打开终端的新标签页时,它会在相同的目录中打开 bash,就像之前的标签页一样。当我在 ~ 目录中时,这很好用,但如果我在其他任何地方,就会出现加载 .bashrc 的错误。
Last login: Sat Oct 15 21:10:00 on ttys002
-bash: .bashrc: No such file or directory
Jakub-Arnolds-MacBook-Pro:projects darth$ 

看起来 .bashrc 是通过相对路径而不是绝对路径加载的,因为如果我执行 source ~/.bashrc,一切都能顺利运行。

loaded bashrc

我认为这是与OS X Lion相关的问题,因为在从Snow Leopard升级之前,我没有遇到过同样的问题。但可能是由于Terminal总是在处打开,我不记得它是否试图打开相同的目录。 然而问题仍然存在,如何通过绝对路径而不是相对路径使Terminal加载〜/.bashrc

1
这个问题应该被移动到apple.SE(如果可能的话?),而不是关闭。 - Sparr
@Sparr 我完全同意你的看法,但是版主们只会移动较新的问题,而不是旧的。请参见此处的讨论(http://meta.stackoverflow.com/q/258349/628006)。 - рüффп
3个回答

364

终端打开一个登录 shell。这意味着 ~/.bash_profile 将被执行,~/.bashrc 则不会。

大多数系统的解决方案是在 ~/.bash_profile 中 "require" ~/.bashrc:只需将以下代码片段放入您的 ~/.bash_profile 中:

[[ -s ~/.bashrc ]] && source ~/.bashrc

8
请问[[ -s /file/path ]]的含义是什么?尝试在谷歌上搜索并不容易理解。 - Shane
18
-s file表示:如果文件存在且大小大于零,则为真。 - ckruse
1
终端打开登录 shell。还有哪些类型的 shell?我在哪里可以找到更多文档? - dknight
4
有所谓的“交互式 shell”和“登录 shell”。您的 bash 手册(man bash)讨论并解释了它,章节 INVOCATION(只需在键入 /INVOCATION 后调用 man bash 进行搜索)。 - ckruse
3
我不明白一个涉及代码执行情况,只需一行代码即可解决的问题为何在编程问题网站上被认为是“离题”的。 - Kheldar
显示剩余6条评论

27
.bashrc重命名为.profile(或将后者软链接到前者)也可以解决问题。参见这里

或者你可以使用符号链接:cd && ln -s ./.bashrc ./.profile 请注意,符号链接对于文件路径是敏感的,我相信使用上述语法是有效的,但为了确保,在任何情况下都可以使用绝对路径。 - Steve Benner
1
哦,不是吧?这些文件有不同的用途。如果你在.profile中使用Bash语法,会破坏常规的sh - tripleee

14

在我的~/.bash_profile中,我有以下内容:

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

如果我使用的是.bashrc 而不是 ~/.bashrc, 那么我会看到你看到的相同症状。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接