.bashrc 和 .bash_profile 的区别和使用

404 阅读2分钟

bashrc

~/.bahsrc 是当前用户下生效的配置文件。(系统级的.bashrc本次不讨论)

专门用于交互式非登录shell会话

使用场景

  • 设置shell别名和函数
  • 定义环境变量,这些变量仅在当前用户的shell会话中有效
  • 修改命令提示符
  • 设置shell的查找路径($PATH)

bash_profile

~/.bash_profile 只对单一用户有效,理解为用户级别。

同样可以用于配置环境变量和启动程序。

它只能登入的时候执行一次。

然而,为了避免登录和非登录交互shell设置的差异。 可以在 .bash_profile 中调用  .bashrc。因此,我们将看到下面的代码片段被插入 .bash_profile,以便在每个交互式登录shell上  .bashrc 也在同样shell 执行

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

## 或者
# generated by Git for Windows
test -f ~/.profile && . ~/.profile
test -f ~/.bashrc && . ~/.bashrc

通常, .bashrc是添加别名和bash相关功能的最佳场所。

交互式和非交互式shell

Bash在交互式shell中提供了两种模式选项,登录和非登录 (login and non-login)。

当我们使用ssh登录到系统时,我们得到一个交互式登录的shell (interactive login shell),这个shell在被调用时会读取启动文件。 然而,当我们在一个已经登录的shell上调用一个新的shell时,我们得到的是一个交互式的、非登录的shell。这个shell只执行 .bashrc 文件

当shell不需要任何人类干预即可执行命令时,我们将其称为非交互式shell (non-interactive shell)。例如,当脚本生成子shell来执行命令时,子shell是非交互式shell,子shell不会执行任何启动文件,它从创建它的shell中继承了环境变量。

总结

简单的说,.bash_profile 只在会话开始时被读取一次,而 .bashrc 则每次打开新的终端窗口或标签页时,都会被读取。

所以一般优先把变量,别名等设置在 .bashrc 里面。

注: mac 系统使用 zsh ,是不会主动调用 bash_profile 文件,所以把变量别名设置在 .zshrc 文件中。 如需调用 .bash_profile, 可在 ~/.zshrc 最后一行添加 一行命令 source ~/.bash_profile

refence:

zoutao98 知乎回答

深入理解Linux环境配置文件:.bashrc、.bash_profile和.profile_.bashrc .profile-CSDN博客

Linux文件 profile、bashrc、bash_profile区别 - 知乎