我有一个添加到 .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:
答案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 中运行时,你所做的是创建另一个实例(它bash
bash
bash
~/.bashrc
bash
bash
将要读取修改后的配置文件,因为它正在启动)。请注意,您的原始实例bash
仍在那里,在bash
您手动运行的后面运行。如果您关闭 shell(使用命令exit
),您将返回到原始 shell(如果您关闭它,您将从终端收到“进程已完成”消息)。
因此,回到您的问题:您的别名在bash
重新读取其配置之前将不起作用。您可以通过bash
重新启动来执行此操作(通过运行在现有 shell 内创建另一个 shell bash
,或关闭并打开终端)或者,您可以使用source
命令来bash
重新读取文件。因此,编辑后~/.bashrc
,请执行source ~/.bashrc
- 别名工作,无需bash
重新启动。