.bashrc和.bash_profile

时间:2020-03-05 15:31:41  来源:igfitidea点击:

如果我们在命令行上花费大量时间,则很有可能需要自定义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”文件中。
这包括别名和函数,自定义提示,历史记录自定义等等。

通常,'~/.bash_profile'包含如下行,这些行表示源'.bashrc'文件。
这意味着每次我们登录到终端时,两个文件都被读取并执行。

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

大多数Linux发行版都使用'~/.profile'而不是'~/.bash_profile'。
所有shell程序都读取“~/.profile”文件,而Bash仅读取“~/.bash_profile”文件。

如果系统上没有任何启动文件,则可以创建它。