.bashrc不在iTerm + Mac OS X中提供


62

我在Mac OS X 10.6中使用iTerm。看来当我打开iTerm时,既.bashrc没有.bash_profile来源也没有来源。我可以知道,因为未定义别名.bashrc。怎么修?


2
发生的事情是~/.bash_profile先由bash调用,这使您在中的指令短路了~/.bashrc。如果恶意程序~/.bash_profile在以前不存在该文件且您已将所有bash命令放入的情况下向您添加了一些指令,则可能会意外发生此问题~/.bashrc。解决方案是删除〜/ .bash_profile,或者让〜/ .bash_profile源〜/ .bashrc。这可以通过在source ~/.bashrc您的末尾添加命令:~/.bash_profile并重新启动终端来执行。
埃里克·莱斯钦斯基

Answers:


53

Bash将根据其调用方式来提供EITHER .bash_profile或.bashrc。如果它是登录外壳,则Bash会按此顺序查找〜/ .bash_profile,〜/ .bash_login或〜/ .profile,并提供找到的第一个(也只有那个)。如果它不是登录外壳,而是交互式的(像大多数终端会话一样),则Bash将提供〜/ .bashrc的源代码。

iTerm可能正在寻找〜/ .bashrc。如果配置为以登录外壳程序启动,它将查找〜/ .bash_profile。几乎可以肯定的是,配置文件中存在错误,而不是外壳程序没有提供它。

我会在每个文件的开头放置一行。在〜/ .bash_profile的顶部:

export BASH_CONF="bash_profile"

在〜/ .bashrc的顶部:

export BASH_CONF="bashrc"

然后,打开一个新的iTerm并键入

$ echo $BASH_CONF

那应该确认文件是源文件,您可以查看文件的语法。


2
设置不同的环境变量为每个源文件允许更多的信息,那就是,如果超过一个文件的时候,你就会知道它,NOST刚刚过去的一个(如果不是为了采购。)
kmarsh

这仍然不会加载.bashrc文件。我必须将源〜/ .bashrc添加到我的iTerm和终端首选项中。顺便说一句,我正在使用Mac OS X 10.9.5。
巨麋鹿

我刚刚添加了一个.profile文件,它可以在OS X 10.9.5上自动运行,而不会影响您的终端首选项。
巨麋鹿

1
我通过转到首选项->配置文件->常规发现它是一个登录Shell,并在命令下选择了登录Shell。在MacOS El Capitan和iTerm2 3.0.14上有效
Aditya

这里的解决方案对我不起作用,但是我找到了解决方案。最初,没有bashrc和bash_profile。这里的答案建议创建一个bashrc。我没有创建bashrc文件,而是创建了bash_profile,它可以正常工作。现在,我需要了解为什么未执行bashrc而执行bash_profile。
kalmanIsAGameChanger

68

在iTerm2中,这些解决方案都不适合我。我可以通过添加命令来正确读取我的.bashrc文件

source ~/.bashrc 

到我的iTerm配置文件的“设置/常规”中的“ 在开始时发送文本:”字段中。

在此处输入图片说明


当您接受了公认的答案后,会发生什么?没有输出?
丹尼尔·贝克

对。我没有任何输出,iTerm 2只是加载了默认bash shell而没有任何别名。
Mark Struzinski 2012年

这个答案直到现在才被打破-第二个片段应该被纳入~/.bashrc。编辑它。
丹尼尔·贝克

我使用ZSH,并且遇到相同的问题。除了我的配置文件一开始不存在并且必须创建。我使用了此答案并设置了“开始时发送文本”,但是,当我重新启动ZSH创建的.zsh并覆盖了我的文件时,我能够删除“开始时发送文本”并将配置添加到新生成的文件中。不知道这是否可以帮助任何人
Arnolio

我以为这是我的问题..然后,一路意识到我的主目录不是我最初进入的文件夹..所以当我将.bash_profile移到另一个位置时,我以为我是ln -s(指向它的链接)从我的〜(家庭)目录中,我实际上是在错误的文件夹中添加了符号链接。在此处添加此链接以防其他人使用此链接
寻求

23

我只是想知道您真的使用Bash吗?也许您可以使用echo $SHELL,很有可能您正在使用zsh,是否已在on-my-zh上安装?

实际上,我遇到了与您相同的问题,我通过配置〜/ .zshrc而不是〜/ .bash_profile(用于登录Shell)或〜/ .bashrc(用于非登录Shell)来解决此问题。

也许可以尝试一下


1
有趣的建议,尽管该问题已有3年历史,并且已经被接受。
泰森2014年

12

在我的10.6机器上~/.profile是来源。因此,一个source .bashrc入口~/.profile应该可以完成这项工作。


在Mac OS El Capitan上为我工作。
user674669

我的经验表明,您不想从一个文件中获取一个.bashx文件,由于某种原因它们是分开的:)如果您这样做,则说明有问题
Alexander Mills

@AlexanderMills这些文件存在的原因是因为Mac直接将它们撕破了Unix。没有理由不应该为用户加载它们。
RaisinBranCrunch

问题是,如果它们相互加载,则可以得到循环调用,最好的避免方法是使用env var翻转布尔值,并且仅在未设置布尔值的情况下才加载其他文件。
亚历山大·米尔斯


6

在我的10.9机器上,〜/ .bash_profile是源。因此〜/ .bash_profile中的源.bashrc条目应该可以完成这项工作。


1

将您的别名定义放在bash配置文件中,您必须创建该文件,但是它将自动获得。我创建了一个单独的文件,命名为alias.configuration,并在.bash_profile中提供了该文件,仅是因为我定义了另一个用户并希望设置相同的别名。


1
实际上,两者.bashrc都不.bash_profile是来源。
Computist 2011年

1

set -x

到...的开始/etc/profile。这给你一个行由行账户身边的一切被执行时bash启动,包括内源文件/etc/profile~/.bash_profile等等。这是一个有点吓人,如果你不明白bash的脚本非常好,但是你可以看到,如果启动文件中有错误,输出对于精通bash帮助您查找问题的人员很有用。

set -x完成故障排除后,可以删除该行。


1

在10.10和iTerm2 2.0上,自定义配置文件

  • .bash_rc应该可以工作。
  • .bash_profile,请尝试使用“ / bin / bash --login”而不是“ / bin / bash”

我对这个答案投了赞成票,因为它似乎是唯一承认OS X的人,在某些时候,bash将源于“ .bash_rc”而不是“ .bashrc”。我之所以来这里,是因为我试图找出原因(我仍然不知道)。
Marnix A. van Ammers '16

0

在iTerm2中,请确保您使用的是“登录外壳”,而不是包含“登录”的自定义命令,该命令没有达到您的期望。


iTerm2命令实际上是做什么的?
studgeek '16

0

进行以下更改,iTerm将获取bashrc的源代码

iTerm>首选项>常规> [x]命令:/ bin / bash


0

可以通过在/ etc / bashrc中添加以下行来解决问题

[-r“ $ HOME / .bashrc”] &&。“ $ HOME / .bashrc”


-1

我将几个解决方案结合在一起,以达到预期的效果。

.bash_profile 源并在zsh上运行。

Preferences -> Profiles -> General

在“命令”下选择“命令”。
并在文本框中添加/bin/bash --login

然后在.bash_profile中添加行 /bin/zsh --login

而已。


(1)什么?(2)如果您bash一直跑步zsh,那不是任何人所期望的。
斯科特(Scott)

如果设置/ bin / bash --login,则它不提供zsh的任何功能。然后,如果我将其优先更改为loginshell,则不会读取.bash_profile。每次我必须source ~/.bash_profile手动运行。@Scott完成上述操作后,按要求的方式安装了zsh。
穆罕默德·罗勒

(1)我的观点是,这zsh可能是想要的但此问题不是必需的不需要的,此问题被标记为[bash],并且没有提及任何内容zsh。(2)如果您在.bashrc和和或中定义了别名和shell函数并设置了变量(不导出它们).bash_profile,它们是否可以在zshshell中使用?
斯科特(Scott)
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.