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的缘故吧。

https://www.cnblogs.com/gujiande/p/9444273.html

posted @ 2021-09-13 11:52  丁少华  阅读(508)  评论(0编辑  收藏  举报