当我在 Mac OSX 上的终端命令行上输入“bash”时会发生什么?

Chr*_*uck 7 mac command-line macos

我有一个已添加到 .bashrc 的别名,它仅在我运行“bash”命令后才在终端中激活。我觉得我应该知道这里发生了什么,但我不知道。:)

Dan*_*eck 6

来自man bash

当一个不是登录 shell的交互式 shell启动时,bash 读取并执行来自 的命令~/.bashrc(如果该文件存在)。

强调我的

在 OS X 上,所有终端窗口和选项卡都运行登录 shell,这相当于您运行bash --login而不是bash. ~/.bashrc因此被忽略,除非明确地source来自例如~/.bash_profile

当 bash 作为交互式登录 shell 被调用时,[...] 它首先从文件中读取并执行命令/etc/profile(如果该文件存在)。读取该文件后,它会按该顺序查找~/.bash_profile~/.bash_login、 和~/.profile,并从第一个存在且可读的命令中读取和执行命令。

~/.bash_profile如果不存在则创建,并添加以下行:

. .bashrc
Run Code Online (Sandbox Code Playgroud)

然后.bashrc甚至会为登录会话加载。


pol*_*ial 2

根据 OS X 的版本,您使用的默认 shell 可能不是 bash。您可以通过键入(在运行“bash”之前)来验证这一点:

$ echo $SHELL
/bin/zsh
Run Code Online (Sandbox Code Playgroud)

您可以将默认 shell 更改为 bash,这样您就不必按照此处的说明继续运行该命令:

https://serverfault.com/questions/21044/how-do-i-change-a-users-default-shell-in-osx

来自@chopper3

对于 <=10.4 - netinfo 管理器,/users/whoever/shell

对于 10.5=> - SysPrefs、帐户、按住 Control 键单击用户、选择高级选项、编辑登录 shell 字段。

为了进一步回答您的问题,.bashrc 仅由 bash shell 使用。如果您愿意,您可以找出您正在使用的 shell,并将别名添加到 .tcshrc 或 .zshrc,而不是更改所有内容以使用 bash。

有关 shell 是什么的更多信息:

http://en.wikipedia.org/wiki/Shell_(计算)

并特别强调:

http://en.wikipedia.org/wiki/Bash_(Unix_shell)