输入一下命令:
env
回车显示如下
TMPDIR=/var/folders/15/x9lp8tvn1sv7hy79bv1mxr0r0000gn/T/
__CFBundleIdentifier=com.apple.Terminal
XPC_FLAGS=0x0
TERM=xterm-256color
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.5tlbZA2P4S/Listeners
XPC_SERVICE_NAME=0
TERM_PROGRAM=Apple_Terminal
TERM_PROGRAM_VERSION=440
TERM_SESSION_ID=4184D918-D2C0-40EA-AF65-4A1F68A68396
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即可
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的缘故吧。