问题:MacOS,配置了iTerms作为终端工具,最近发现在/etc/profile和~/.bashrc中配置的环境变量在开机或者打开新的终端的时候并没有自动加载,每一次打开新的终端端口都要重新source一下。但是诸如 echo $HADOOP_HOME
这样的命令执行是可以执行的,所以问题就在于环境变量总加载点在哪里。
Mac中的环境变量文件
Mac一般使用bash作为默认shell,mac系统的环境变量加载顺序一般为:
全局配置
- /etc/profile 系统级别环境变量,全局公有配置,不管是哪个用户登录的时候都会读取该文件。此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
- /etc/paths 全局环境变量建议修改到这个文件
- /etc/bashrc 全局公有配置,bash shell执行时不管是何种方式都会读取此文件。为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
单个用户配置
- ~/.bash_profile 任意一个文件中添加环境变量(注意Linux中是.bashrc,Mac中是.bash_profile)。当bash shell是以login方式登录的时候才会读取此文件,该文件仅执行一次。如果在操作命令行的过程中想立刻生效,需要source命令。默认情况下,他设置一些环境变量,并加载用户的.bashrc文件
- ~/.bashrc 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
我的情况
- 首先发现/etc/profile中配置的环境变量名称是没有问题的,但是路径$PATH并没有加载
- 检查~/.bash_profile发现了罗列在这个文件中的环境变量都加载到了$PATH中,那么在这个文件中添加然后问题解决。
1
2source /etc/profile
source ~/.bashrc
结论
注意我的~/.bash_profile中只有路径变量,并没有其他文件的加载。
/etc/profile中与其他路径的加载相关的也只有
1 | if [ -x /usr/libexec/path_helper ]; then |
所以私以为~/.bash_profile会是最终配置$PATH的地方,至少是决定了最终环境路径的地方。