如何修复终端无法在OS X Lion上加载〜/ .bashrc [关闭]


178

每当我使用Cmd+在Terminal中打开新选项卡时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,一切都会顺利进行。

加载的bashrc

我认为这是与OS X Lion相关的问题,因为在从Snow Leopard升级之前,我没有遇到相同的问题。但这可能是由于Terminal总是在处打开~,我不记得它是否试图打开相同的目录。

但是问题仍然是一样的,如何~/.bashrc通过绝对路径而不是相对路径来使终端负载?


1
此问题应移至apple.SE(如果可能?),而不要关闭。
Sparr 2014年

@Sparr我完全同意您的意见,但主持人只是在提出新的问题,而不是陈旧的问题。见讨论这里
рüффп

Answers:


359

终端打开一个登录外壳。这意味着,~/.bash_profile将被执行,~/.bashrc而不是。

大多数系统上的解决方案是“要求”~/.bashrc中的~/.bash_profile:只需将此代码段放入您的~/.bash_profile

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

8
谁能解释一下[[ -s /file/path ]]正在做什么?尝试向Google解释不是一件容易的事。
Shane 2013年

18
来自man bash:-s file如果文件存在且大小大于零,则为true。
ckruse

1
“终端打开登录外壳”-操作系统外壳还有哪些其他类型?在哪里可以找到有关它的更多文档?
dknight

4
有所谓的“交互式外壳”和“登录外壳”。你的bash手册(man bash)谈论它,并解释它,章调用(只是搜索INVOCATION调用后man bash通过打字/INVOCATION
ckruse

3
我看不到通过代码行解决的与代码执行情况有关的问题是如何在编程问题站点“脱口而出”的。
Kheldar 2014年

26

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


或者,您也可以对其进行符号链接:cd && ln -s ./.bashrc ./.profile请注意,符号链接对于文件路径很敏感,我相信使用上述语法是可行的,但要确保在任何情况下都可以使用绝对路径。
史蒂夫·本纳2014年

1
嗯不 这些文件具有不同的用途。如果您具有Bash语法,.profile则会破坏常规sh
人间

14

我的内容如下~/.bash_profile

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

如果我使用.bashrc而不是~/.bashrc,则会看到与您所见相同的症状。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.