mac的环境变量
查看环境变量
在终端下输入一下命令 env
,回车显示如下:
...
SHELL=/bin/zsh
HOME=/Users/dshvv
LOGNAME=dshvv
USER=dshvv
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
SHLVL=1
PWD=/Users/dshvv
OLDPWD=/Users/dshvv
LANG=zh_CN.UTF-8
_=/usr/bin/env
如果只看path,则输入echo $PATH
即可,回车后会有如下:
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
环境变量文件优先级
/etc/profile
/etc/paths
~/.bash_profile
~/.bash_login
~/.profile
~/.bashrc
环境变量分类
全局系统变量
/etc/profile
/etc/paths
是系统级别的,系统启动就会加载,对每个用户都生效。
每次修改需要重启方可生效,否则只能source ~/.bashrc
才会立刻生效哦
用户系统变量
~/.bash_profile
~/.bash_login
~/.profile
是当前用户级的环境变量
优先级是从前往后的顺序读取,如有~/.bash_profile
,则后几个文件就会被忽略不读了,如不存在,才会以此类推读取后面的文件。
每个用户都可使用该文件输入专用于自己使用的shell信息,用户进入系统,系统启动就会加载,
和全局系统变量一样,该文件也仅仅执行一次!
以上也是每次都需要重启才生效,否则只能source ~/.bashrc
才会立刻生效哦
终端特有环境变量
~/.bashrc
没有上述规则,它是bash shell打开的时候载入的。
为每一个运行bash shell的用户执行此文件.每次bash shell被打开时,该文件就会被读取。
修改完毕,如果想立刻生效,则可执行下面的语句:source ~/.bashrc
否则只有新开的shell窗口才会生效
注意:zsh其实并不使用 /etc/profile
文件,而是使用/etc/zsh/
下面的 zshenv、zprofile、zshrc、zlogin 文件,并以这个顺序进行加载。
bash才会去加载/etc/bashrc
。而zsh则会加载/etc/zshrc
。
在mac系统中,在之前的终端是使用bash的。
但是从 macOS Catalina 版开始,bash下岗了,被zsh这个更先进的终端系统所替代。
终端是zsh还是bash,其实是没有啥区别的。其中的最大变数就是:配置文件到底是.zprofile|.zshrc
,还是.bash_profile|bashrc
。
因为,在很多地方,都是在这里加载环境变量的,如果zsh和bash切换了,那么就意味着一些环境变量可能就失效了。
.zprofile
的作用与 .bash_profile
相同,并且在登录时运行(包括通过 SSH 运行)。
.zshrc
的作用与 .bashrc
相同,并针对每个新的“终端”会话运行。
可以通过 echo $SHELL
来查看当前的shell类型
我该用哪个
推荐~/.bash_profile
,因为大家配置mysql、还是jdk等等,都是拿这个举例子。
猜测如下:
如果使用全局变量,则会污染环境,影响比较大。
如果使用终端特有的变量,则每次都要加载,浪费性能。
所以使用了用户的系统变量。
而用户的系统变量中bash_login 需要登陆,才能继续进行,显然不方便。
至于~/.profile
网上对比~/.bash_profile
对比的不多,推测可能是按照加载顺序优先配置~/.bash_profile
的缘故吧。