Mac和Ubuntu系统下.bash_profile和.bashrc文件
本文部分参考Josh Staiger文章。
前言
我平时使用Ubuntu或者Mac。当设置shell的PATH 或者其他环境变量时,你可以放在.bashrc 和.bash_profile其中的任何一个文件里,如果文件不存在你还可以创建一个,但是两个文件的启动有何区别?
以Ubuntu为例.bash_profile 在login shell 启动时执行而.bashrc在non-login shell 启动时执行。(Mac 情况不同,后文提到)
login shell 和 non-login shell
login shell
用户登录(输入用户名密码)时打开的shell,就叫做login shell。用户登录主要分三种:
命令行登录
依次寻找下面三个文件。
~/.bash_profile
~/.bash_login
~/.profile
需要注意的是,这三个文件只要有一个存在,就不再读入后面的文件了。
ssh登录
和命令行登录情况相同
图形界面登录
只加载 /etc/profile 和 ~/.profile。也就是说,~/.bash_profile 不管有没有,都不会运行。
non-login shell
用户进入操作系统以后,常常会再手动开启一个shell。这个shell就叫做 non-login shell,意思是它不同于登录时出现的那个shell,不读取/etc/profile和.profile等配置文件。
non-login shell会读入用户自己的bash配置文件 ~/.bashrc。大多数时候,我们对于bash的定制,都是写在这个文件里面的。
为什么需要两种不同文件
比如你想在登录时打印一些电脑诊断信息(内存使用,在线用户等等)。你只想在每次登录的时候看到,所以将相关代码写入.bash_profile 如果你写入.bashrc 则你每次打开terminal都会打印这些信息。
Mac例外
Mac的Terminal打开的每个新shell默认为login shell只加载.bash_profile。而且,不管是ssh登录,还是在图形界面里启动shell窗口,都是如此。
建议
将下面的脚本加入.bash_profile
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
注:第二行开头的那个点,是source命令的简写形式,表示运行某个文件,写成source ~/.bashrc也是可以的。[ -f ~/.bashrc ] 中括号内侧有空格。
这样执行.bash_profile 时也会执行.bashrc。
本文探讨了Mac和Ubuntu系统中.bash_profile与.bashrc的区别。loginshell启动时执行.bash_profile,而非loginshell启动时执行.bashrc。文中详细介绍了这两种shell的启动场景及其配置建议。
8214

被折叠的 条评论
为什么被折叠?



