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:
深入理解Linux环境配置文件:.bashrc、.bash_profile和.profile_.bashrc .profile-CSDN博客