MAC 更新 “.bash_profile” 系统全局配置文件不生效的解决方案

文章目录

        • 一、场景介绍
        • 二、场景再现
        • 三、问题分析
        • 四、解决方案

一、场景介绍

??在采用 Mac 系统安装 JDK 时,是不需要配置环境变量的,只要安装成功即可直接在任意的终端访问到 java 命令。

??但是在一些特需开发环境中,需要使用不同的 JDK 版本(采用 IDEA 开发的同学可以忽略这种情况,本次只是制造一个测试场景),那么,我们就必须配置不同版本的 JDK 环境了。

二、场景再现

  1. 本机安装了 JDK 8JDK 13,在不配置环境变量的情况下,默认使用的是 JDK 13

  2. 编辑 .bash_profile 文件

    1
    vim ~/.bash_profile
  3. 配置指定版本 JDK 的环境变量

    1
    2
    3
    # SET JAVA ENVIRONMENT
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home
    export PATH=$JAVA_HOME/bin:$PATH

  4. 更新配置文件

    1
    source ~/.bash_profile
  5. 在本次 shell 窗口中直接查看 JDK 版本

    1
    2
    3
    4
    ? ~/ 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)
  6. 关闭 shell 窗口后再次打开 shell 窗口再次查看 JDK 版本

    1
    2
    3
    4
     ? ~/ 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)
  7. 以上的结果真的是让人 What Fuck!!!

三、问题分析

  1. 查看环境变量

    1
    2
    ? ~/ echo $PATH
    /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
  2. 从打印出来的环境变量可以看出,刚刚配置的 .bash_profile 完全没有生效

  3. Mac 下环境变量的加载顺序

    1
    2
    3
    4
    5
    6
    /etc/profile
    /etc/paths
    ~/.bash_profile
    ~/.bash_login
    ~/.profile
    ~/.bashrc

    P.S
    /etc/profile/etc/paths 为系统级别的,在系统启动以后就会加载,后面的是用户级别的,一般首次配置环境变量,会新建 ~/.bash_profile 文件,在里面进行 PATH 的配置,当系统读取到了 ~/.bash_profile 中有效的命令以后就不会再往下读了,如果没有读到所执行的命令,则讲继续往下的配置文件中读取。

  4. 通过以上对系统环境变量到了解,我们配置的环境变量一定是可以被加载到,但是现实效果为什么会截然不同?

  5. 猛的一拍脑袋,原来是因为我在安装 Iterm 2 控制台的时候,将系统的默认脚本 bash 修改为 zsh 了,而 zsh 加载的是 ~/.zshrc 文件,恰巧 ~/.zshrc 并没有配置什么环境变量

四、解决方案

  • 方案一 采用 bash 作为命令行工具

    1
    2
    3
    4
    5
    # 切换系统 shell 默认的模式
    chsh -s /bin/bash

    # 此模式采用 .bash_profile 作为系统环境变量的配置文件
    source ~/.bash_profile
  • 方案二.bash_profile 系统环境变量加到 zsh

    1
    2
    3
    4
    5
    # 在 ~/.zshrc 的最后一行加入如下内容
    source ~/.bash_profile

    # 重新加载 .bash_profile
    source ~/.bash_profile