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

一、场景介绍

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

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

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

  2. 编辑 .bash_profile 文件

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

    # SET JAVA ENVIRONMENT
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home
    export PATH=$JAVA_HOME/bin:$PATH
    
  4. 更新配置文件

    source ~/.bash_profile
    
  5. 在本次 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)
    
  6. 关闭 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)   
    
  7. 以上的结果真的是让人 What Fuck!!!

三、问题分析
  1. 查看环境变量

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

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

    /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 作为命令行工具

    # 切换系统 shell 默认的模式
    chsh -s /bin/bash
    
    # 此模式采用 .bash_profile 作为系统环境变量的配置文件
    source ~/.bash_profile
    
  • 方案二.bash_profile 系统环境变量加到 zsh

    # 在 ~/.zshrc 的最后一行加入如下内容
    source ~/.bash_profile 
    
    # 重新加载 .bash_profile
    source ~/.bash_profile 
    
### 回答1: .bash_profile和.bashrc是两个文件名,用于定制Bash shell的行为和环境。它们通常用于Unix-like系统,如Linux和Mac OS。 .bash_profile是用户的个人配置文件,它位于用户的主目录下。当用户登录时,Bash shell会先读取.bash_profile文件,并执行其中的命令。用户可以在这个文件中设置环境变量、别名、函数等个性化配置。例如,用户可以在.bash_profile中添加export命令来设置环境变量,以便在每次登录时自动定义一些变量。 .bashrc是Bash shell的运行配置文件,它位于用户的主目录下或者全局配置文件夹中。当用户在已经登录的终端窗口打开新的Bash shell时,Bash shell会读取并执行.bashrc文件中的命令。用户可以在这个文件中定义自己喜欢的别名、函数、命令行选项等配置。例如,用户可以在.bashrc中定义一个别名,使得输入这个别名时会执行一条长而常用的命令。 .bash_profile和.bashrc的区别在于执行的时机。.bash_profile只在用户登录时执行一次,而.bashrc在每次打开新的Bash shell时执行。这样设计的目的是为了避免在每次打开新的终端窗口时都执行一次较慢的命令。 总之,.bash_profile和.bashrc是用于配置Bash shell行为和环境的文件,它们的作用是定制化用户的命令行体验,使得用户可以根据自己的需求进行个性化配置。 ### 回答2: .bash_profile 和 .bashrc 都是与 Bash(Unix 和 Linux 操作系统的默认 Shell)相关的配置文件。虽然它们的作用有些重叠,但也有一些区别。 .bash_profile 是用户登录时 Bash 首先加载的文件。它主要用于个人用户特定的登录配置。在这个文件中,我们可以定义一些用户特定的环境变量、别名和函数等配置。这些配置会在用户登录时生效,但在新的终端窗口或会话中并不会重新加载。 .bashrc 是每个新的终端窗口或会话启动时加载的文件。它主要用于每个 Shell 实例通用的配置。在这个文件中,可以定义一些通用的环境变量、别名和函数等配置。这些配置会在每次新的终端窗口或会话启动时生效。 .bash_profile 的加载是在登录时进行的,而 .bashrc 的加载是在每个新的终端窗口或会话启动时进行的。所以,.bash_profile 主要用于用户登录时的个人配置,而 .bashrc 则用于每个新的终端窗口或会话的通用配置。 当我们需要配置一些只与用户登录有关的设置时,我们应该将这些设置放在 .bash_profile 中。而当我们需要配置一些与 Shell 实例无关的通用设置时,我们应该将这些设置放在 .bashrc 中,以保证每个终端窗口或会话启动时都能生效。 总结起来,.bash_profile 是用户登录时 Bash 加载的个人配置文件,而 .bashrc 是每个新的终端窗口或会话启动时加载的通用配置文件。通过合理使用这两个文件,我们可以根据需要定制自己的 Shell 环境。 ### 回答3: .bash_profile和.bashrc是两个与Shell相关的常用配置文件。 .bash_profile是用户登录到系统时,Shell会首先加载和执行的配置文件。它通常用于设置用户的个性化环境变量、加载自定义函数和别名等操作。比如,可以在.bash_profile中定义PATH变量,指定用户首选的路径顺序,还可以加载个人的shell函数、别名和自定义命令等。 .bashrc是每次打开新的终端窗口时都会加载和执行的配置文件。它通常用于设置用户习惯的Shell环境,比如定义用户喜欢的别名、快捷键、自定义提示符等。.bashrc通常会被.bash_profile首先加载,所以在.bash_profile中可以通过source命令引入.bashrc,以确保两个配置文件的设置都能生效。 这两个配置文件的区别在于加载的时机和作用范围。.bash_profile只在用户登录时加载一次,因此它适合于一些只需要设置一次的环境变量和加载自定义函数等操作。而.bashrc在每次打开新的终端窗口时都会加载,所以适合用于定制Shell环境和设置一些与特定终端会话相关的配置。 当用户登录到系统时,Shell会首先加载.bash_profile文件,然后再加载.bashrc文件,以确保用户个性化设置和习惯的Shell环境能够正确生效。通过正确配置这两个文件,用户可以实现自定义的Shell环境,提高工作效率和使用舒适度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值