Bash 的配置文件位置包括 .bash_profile.bashrc,那这两个配置文件有什么区别呢?

根据 http://linux.die.net/man/1/bash 的描述,.bash_profile is executed for login shells, while .bashrc is executed for interactive non-login shells.

什么是 login 和 non-login shell ?

当通过 console登录 时(不管是通过物理机器还是远程 ssh),.bash_profile在初始化命令弹出之前就已经执行。

但是,当你 已经登录进机器 ,不管是通过 Gnome 还是 KDE 的 xterm,那么.bashrc 在窗口弹出之前执行。而且,.bashrc在使用 /bin/bash 在 Terminal 调用时同样会执行。

为什么是两个不同的文件?

.bash_profile会在每次登录之前打印一长串的诊断信息,如果你只想在启动时看到,使用 .bash_profile, 如果放在.bashrc 中,你会在每一次新启动一个 Terminal 时候看到一次。

Mac OS X – 一个例外

每一次新启动一个 terminal 窗口时,调用 .bash_profile 而不是 .bashrc, 其它 GUI 终端模拟器也可能这样做,但是多数不是这样做的。

建议

多数情况下,分开管理不是很方便,当你想要设定一个环境变量的时候,你想要两个都生效 , 你可以通过在.bash_profile 中执行命令 source .bashrc,然后在.bashrc 中写入 PATH 或者其他的设定。

添加如下命令到 .bash_profile

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

这样当你登录到 console 时,.bashrc会被调用。

参考链接

http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html