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

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

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

答案1

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

$ echo $SHELL
/bin/zsh

您可以按照此处的说明将默认 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_(计算)

并特别 bash:

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

答案2

man bash

当交互式 shell这不是一个登录 shell启动后,~/.bashrc如果该文件存在,bash 将从中读取并执行命令。

强调我的

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

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

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

. .bashrc

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

答案3

别名不起作用你运行bash- 它有效尽管你正在跑步bash

基本上,是一个包含每次启动时~/.bashrc运行的指令的文件。所有最新版本的 Mac OS X 的默认 shell 都是,因此每次打开终端时都会运行它。但是,当你编辑配置文件时,它并不会神奇地重新读取配置文件,因此当你将别名添加到时,它不会立即起作用。当你在现有 shell 中运行时,你所做的是创建另一个实例(它bashbashbash~/.bashrcbashbash将要读取修改后的配置文件,因为它正在启动)。请注意,您的原始实例bash仍在那里,在bash您手动运行的后面运行。如果您关闭 shell(使用命令exit),您将返回到原始 shell(如果您关闭它,您将从终端收到“进程已完成”消息)。

因此,回到您的问题:您的别名在bash重新读取其配置之前将不起作用。您可以通过bash重新启动来执行此操作(通过运行在现有 shell 内创建另一个 shell bash,或关闭并打开终端)或者,您可以使用source命令来bash重新读取文件。因此,编辑后~/.bashrc,请执行source ~/.bashrc- 别名工作,无需bash重新启动。

相关内容