文章目录
{ .ImgAlt }}

如果你在终端命令行上花费很多时间,很有可能你想要自定义你的 Shell 环境。这就意味着比如创建关联,添加一个新目录到$PATH,或者修改一个 shell 提示符。

你可能已经浏览过其他的教程,他们告诉你把你的配置放在.bashrc, .bash_profile或者其他的配置文件,这些配置文件被 Bash shell 读取和执行。

在本文中,我们将要讨论 Bash 启动文件,和.bashrc, .bash_profile 两个文件之间的不同。

一、交互式登录 和 非登录 shell

在打开终端时,Bash 读取和执行一系列启动文件中的命令。这些文件的读取,依赖于shell 是作为 交互式登录 还是 非登录 shell 执行。

一个 shell 可以是交互式或者非交互式的。

简单来讲,一个交互式 shell 就是一个可以读取和写入用户终端的 shell,而非交互式 shell 是一个不和终端关联的 shell,就像执行一个脚本。

一个交互式 shell 可以是登录 或者 非登录的 shell。

当用户通过 SSH 远程登录到终端,或者在本地登录终端,或者当 Bash 启动的时候加上--login选项的时候,一个登录 Shell 启动了。从登录 shell 中,输入bash或者打开一个新的 Gnome 终端标签时,一个交互式非登录 shell启动了。

二、Bash 启动文件

当 Bash 作为交互式登录 shell 启动时,Bash 查找/etc/profile文件,并且如果文件存在,它会运行文件中的命令。然后 Bash 按照顺序搜索~/.bash_profile, ~/.bash_login, 和 ~/.profile 文件,并且读取找到的文件,并执行其中的命令。

当 Bash 作为交互式非登录 shell 启动时,如果 ~/.bashrc 文件存在并且可读,那么它从 ~/.bashrc文件中读取并执行命令。

三、.bashrc 和 .bash_profile 的不同

在 Bash 作为一个交互式登录 shell 启动时,.bash_profile 被读取,并且执行,而.bashrc在交互式非登录 shell 启动时被执行。

使用.bash_profile运行仅仅需要运行一次的命令,例如, 自定义 $PATH 环境变量。

将每次启动一个新的 shell 需要运行的命令放在.bashrc文件。这包括关联 和 函数,自定义 shell 提示符,历史自定义设置等等。

通常,~/.bash_profile包含了下面这样的内容,用来运行.bashrc。这意味着,你每次登录终端,两个文件都会被读取和执行:

阿里云: 爆款云服务器低至1折,1核1G 1M 仅17月/月
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 启动文件的信息。




如果你有任何疑问,请通过以下方式联系我们:

微信:

微信群: 加上面的微信,备注微信群

QQ: 3217680847

QQ 群: 82695646 雪梦科技交流群

原文 :https://linuxize.com/post/bashrc-vs-bash-profile/

    版权声明:本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。知识共享许可协议
阿里云: 爆款云服务器低至1折,1核1G 1M 仅17月/月

相关推荐