一、场景介绍
在采用 Mac
系统安装 JDK
时,是不需要配置环境变量的,只要安装成功即可直接在任意的终端访问到 java
命令。
但是在一些特需开发环境中,需要使用不同的 JDK
版本(采用 IDEA
开发的同学可以忽略这种情况,本次只是制造一个测试场景),那么,我们就必须配置不同版本的 JDK
环境了。
二、场景再现
-
本机安装了
JDK 8
和JDK 13
,在不配置环境变量的情况下,默认使用的是JDK 13
-
编辑
.bash_profile
文件vim ~/.bash_profile
-
配置指定版本
JDK
的环境变量# SET JAVA ENVIRONMENT export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home export PATH=$JAVA_HOME/bin:$PATH
-
更新配置文件
source ~/.bash_profile
-
在本次
shell
窗口中直接查看JDK
版本 ~/ java -version java version "1.8.0_241" Java(TM) SE Runtime Environment (build 1.8.0_241-b07) Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
-
关闭
shell
窗口后再次打开shell
窗口再次查看JDK
版本 ~/ java -version java version "13.0.1" 2019-10-15 Java(TM) SE Runtime Environment (build 13.0.1+9) Java HotSpot(TM) 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing)
-
以上的结果真的是让人
What Fuck!!!
三、问题分析
-
查看环境变量
~/ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
-
从打印出来的环境变量可以看出,刚刚配置的
.bash_profile
完全没有生效 -
Mac
下环境变量的加载顺序/etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc
P.S
/etc/profile
和/etc/paths
为系统级别的,在系统启动以后就会加载,后面的是用户级别的,一般首次配置环境变量,会新建~/.bash_profile
文件,在里面进行PATH
的配置,当系统读取到了~/.bash_profile
中有效的命令以后就不会再往下读了,如果没有读到所执行的命令,则讲继续往下的配置文件中读取。 -
通过以上对系统环境变量到了解,我们配置的环境变量一定是可以被加载到,但是现实效果为什么会截然不同?
-
猛的一拍脑袋,原来是因为我在安装
Iterm 2
控制台的时候,将系统的默认脚本bash
修改为zsh
了,而zsh
加载的是~/.zshrc
文件,恰巧~/.zshrc
并没有配置什么环境变量
四、解决方案
-
方案一 采用
bash
作为命令行工具# 切换系统 shell 默认的模式 chsh -s /bin/bash # 此模式采用 .bash_profile 作为系统环境变量的配置文件 source ~/.bash_profile
-
方案二 将
.bash_profile
系统环境变量加到zsh
中# 在 ~/.zshrc 的最后一行加入如下内容 source ~/.bash_profile # 重新加载 .bash_profile source ~/.bash_profile