如果您在记忆命令行上花费大量时间,则很可能需要自定义shell环境。 这可能意味着创建别名,向$PATH
添加新目录,或更改shell提示符的外观。
您可能遇到过一些教程,他们说可以将您的配置放入.bashrc
,.bash_profile
或bash shell读取和执行的另一个配置文件中。
在本文中,我们将讨论Bash启动文件以及.bashrc
和.bash_profile
文件之间的区别。
交互式登录和非登录shell
当被调用时,Bash从一组启动文件中读取并执行命令。 读取什么文件取决于shell是作为交互式登录shell还是非登录shell的调用。
shell可以是交互式的,也可以是非交互式的。
简而言之,交互式shell是读取和写入用户终端的shell程序,而非交互式shell程序是与终端无关的shell程序,例如执行脚本时。
交互式shell程序可以是登录shell程序,也可以是非登录shell程序。
当用户通过ssh或本地远程登录到终端,或者使用--login
选项启动Bash时,将调用交互式登录shell。 也可以从交互式登录shell调用交互式非登录shell,例如在shell提示符下键入bash
或打开新的Gnome终端选项卡时。
Bash启动文件
当作为交互式登录shell调用时,Bash查找/etc/profile
文件,如果文件存在,它将运行文件中列出的命令。 然后Bash按照列出的顺序搜索~/.bash_profile
,~/.bash_login
和~/.profile
文件,并从找到的第一个可读文件中执行命令。
当Bash作为交互式非登录shell程序调用时,它会从~/.bashrc
中读取并执行命令(如果该文件存在并且可读)。
.bashrc和.bash_profile之间的差异
当Bash作为交互式登录shell调用时,将读取并执行.bash_profile
对于交互式非登录shell,则执行.bashrc
。
仅应运行一次的命令应该使用.bash_profile
,例如自定义$PATH
环境变量。
将每次启动新Shell时应该运行的命令放在.bashrc
文件中。 这包括您的别名和function,自定义提示,历史记录自定义等。
通常,~/.bash_profile
包含以下类似于.bashrc
文件来源的行。 这意味着每次您登录到终端时,都会读取并执行两个文件。
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
大多数Linux发行版都使用~/.profile
而不是~/.bash_profile
。 所有Shell程序都读取~/.profile
文件,而Bash仅读取~/.bash_profile
文件。
如果您的系统上没有任何启动文件,则可以创建该文件。
结论
.bash_profile
和.bashrc
是包含shell命令的文件,这些命令在调用Bash时运行。 .bash_profile
在交互式登录shell上读取并执行,.bashrc
在非登录shell上执行。
查看Bash手册,以获取有关 Bash启动文件的更多信息。
如果您有任何问题或反馈,请随时发表评论。