如果你在终端命令行上花费很多时间,很有可能你想要自定义你的 Shell 环境。这就意味着比如创建关联,添加一个新目录到$PATH,或者修改一个 shell 提示符。
你可能已经浏览过其他的教程,他们告诉你把你的配置放在.bashrc
, .bash_profile
或者其他的配置文件,这些配置文件被 Bash shell 读取和执行。
在本文中,我们将要讨论 Bash 启动文件,和.bashrc
, .bash_profile
两个文件之间的不同。
在打开终端时,Bash 读取和执行一系列启动文件中的命令。这些文件的读取,依赖于shell 是作为 交互式登录 还是 非登录 shell 执行。
一个 shell 可以是交互式或者非交互式的。
简单来讲,一个交互式 shell 就是一个可以读取和写入用户终端的 shell,而非交互式 shell 是一个不和终端关联的 shell,就像执行一个脚本。
一个交互式 shell 可以是登录 或者 非登录的 shell。
当用户通过 SSH 远程登录到终端,或者在本地登录终端,或者当 Bash 启动的时候加上--login
选项的时候,一个登录 Shell 启动了。从登录 shell 中,输入bash
或者打开一个新的 Gnome 终端标签时,一个交互式非登录 shell启动了。
当 Bash 作为交互式登录 shell 启动时,Bash 查找/etc/profile
文件,并且如果文件存在,它会运行文件中的命令。然后 Bash 按照顺序搜索~/.bash_profile
, ~/.bash_login
, 和 ~/.profile
文件,并且读取找到的文件,并执行其中的命令。
当 Bash 作为交互式非登录 shell 启动时,如果 ~/.bashrc
文件存在并且可读,那么它从 ~/.bashrc
文件中读取并执行命令。
在 Bash 作为一个交互式登录 shell 启动时,.bash_profile
被读取,并且执行,而.bashrc
在交互式非登录 shell 启动时被执行。
使用.bash_profile
运行仅仅需要运行一次的命令,例如, 自定义 $PATH 环境变量。
将每次启动一个新的 shell 需要运行的命令放在.bashrc
文件。这包括关联 和 函数,自定义 shell 提示符,历史自定义设置等等。
通常,~/.bash_profile
包含了下面这样的内容,用来运行.bashrc
。这意味着,你每次登录终端,两个文件都会被读取和执行:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
大部分 Linux 发行版使用~/.profile
替换~/.bash_profile
。这个~/.profile
被所有的 shell 读取,而~/.bash_profile
仅仅被 Bash 读取。
如果你的系统上没有任何启动文件,你可以创建它。
.bash_profile
和 .bashrc
文件都包含了 shell 命令,在 Bash 启动时都会运行。.bash_profile
在交互式登录 shells 启动时,被读取和执行,而.bashrc
在非登录 shells 启动时执行。
检查 Bash 手册,获取更多关于 Bash 启动文件的信息
原文 :https://linuxize.com/post/bashrc-vs-bash-profile/