为什么Mac OS X没有源〜/ .bashrc?[重复]


95

这个问题已经在这里有了答案:

我发现很多人弄清楚为什么这样的指令:

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

不工作

事实总是证明,无论是在登录shell中还是在从窗口系统生成的shell中(例如Mac OS X中的Terminal app),Mac OS X的bash的启动文件(或Mac的Bash本身)都不会提供〜/ .bashrc文件。

为什么当我之前使用过的所有其他使用Bash的类似Unix的系统都这样做时,为什么呢?

PS:

我发现Bash本身对启动文件说了什么(可能会有所帮助):

当Bash作为交互式登录shell或使用--login选项作为非交互式shell调用时,它首先从文件/ etc / profile中读取并执行命令(如果该文件存在)。读取该文件后,它将按该顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从存在且可读的第一个命令中读取并执行命令。启动外壳程序时,可以使用--noprofile选项来禁止此行为。

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


我还注意到,该命令~/.bash_profile已执行但未执行~/.bashrc。怪异的
igaurav '16

Answers:


90

在OSX中,终端默认情况下会启动登录会话,因此会读取.bash_profile等。(要求您输入名称和密码的GUI登录过程不使用shell脚本,也不启动shell,而这完全是通过启动和工作空间完成的)

在其他Unices上,xterm默认运行非登录Shell,因此它们将读取.bashrc作为脚本,该脚本在登录呼叫时为您提供密码等,登录会话,并且所有终端都是该进程的子进程并继承Shell环境。

从您引用的GNU文档中

作为交互式非登录外壳程序调用

启动不是登录外壳程序的交互式外壳程序时,如果该文件存在,则Bash从〜/ .bashrc读取并执行命令。使用--norc选项可以禁止这种情况。--rcfile file选项将强制Bash从文件而不是〜/ .bashrc中读取并执行命令。

因此,通常,您的〜/ .bash_profile包含以下行

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

在任何特定于登录的初始化之后(或之前)。


7
Unicies = Unixes?
Paul Brewczynski 2014年

8
好吧Unices我的意思是-我在学校学习拉丁语,所以去除了复数形式-参见en.wikipedia.org/wiki/Unix
user151019 2014年

8
...和第三种形式的“ Unixen”(尽管我更喜欢
Unices

7
和第四个“独角兽” ...
修补

8
让我们不要忘记null形式,即“太监”
smatthewenglish

19

bash只读取.bashrc用于非登录炮弹:

启动不是登录外壳程序的交互式外壳程序时,如果该文件存在,则bash从〜/ .bashrc读取并执行命令。使用--norc选项可以禁止这种情况。--rcfile file选项将强制bash从文件而不是〜/ .bashrc中读取并执行命令。

由于Terminal以bash登录外壳程序启动(运行w以查看bash实例的执行方式-bash),.bashrc因此永远不会自动读取。


因此,关键是,Mac OS X上的Termina应用程序始终会创建bash的“登录”实例?为什么呢 如果您真的不登录。(您之前从GUI登录)
Paul Brewczynski 2014年

为什么其他unix系统也读取〜/ .bashrc?
Paul Brewczynski 2014年

3
这里没有人能够解释Apple做出的设计决策。我可以很容易地争论双方,但这都无济于事。因此,只需接受它,因为它可能是最好的选择
nohillside

好吧,这是您第一次运行外壳程序,因此它是登录名,在基于X11的Unices中,您先运行外壳程序,然后运行X,因此它不是登录名
user151019

@PaulBrewczynski好吧,Linux有了从.bash_profile到.bashrc的调用。
Paul Stelian
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.