$ JAVA_HOMEpath在login时在〜/ bash_profile中找不到正确的path

login到我的CentOS 7虚拟机后,我的$ JAVA_HOME总是被设置为: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre ,这是不正确的。

我的〜/ .bash_profile读取:

 # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.144-0.b01.el7_4.x86_64/jre export JAVA_HOME PYCHARM_HOME=/opt/pycharm-community-2017.2.3/ export PYCHARM_HOME ECLIPSE_HOME=/opt/eclipse export ECLIPSE_HOME export SPARK_HOME=/opt/spark PATH=$PATH:$HOME/.local/bin:$HOME/bin:$JAVA_HOME/bin:$SPARK_HOME/bin:$PYCHARM_HOME/bin:$ECLIPSE_HOME export PATH 

Sourcing .bash_profile每当我打开一个新的terminal似乎纠正这个问题,但为什么我的$ JAVA_HOMEpath在启动时默认为旧版本,而不是设置为.bash_profile中指定的目录?

Solutions Collecting From Web of "$ JAVA_HOMEpath在login时在〜/ bash_profile中找不到正确的path"

  1. 在交互式shell中运行ps以确保你在bash
  2. 尝试bash -l登录后,看看它是否修复你的问题。
  3. JAVA_HOME=...之前添加set -x以检查是否有错误。

Sourcing .bash_profile每当我打开一个新的终端似乎纠正这个问题,但为什么我的$ JAVA_HOME路径在启动时默认为旧版本,而不是设置为.bash_profile中指定的目录?

您需要从当前用户注销并再次登录,以便发生环境变量更改。

可能有用

在Bash:

  • Bash作为登录shell会按顺序加载/etc/profile~/.bash_profile~/.bash_login~/.profile
  • Bash作为非登录交互式shell会加载~/.bashrc

环境 :

  • 使用/etc/environment永久系统范围(所有用户,所有进程)为所有用户设置环境变量。

    /etc/environment是一个系统范围的配置文件,这意味着它被所有用户使用。 它是由root拥有,所以你需要成为一个管理员用户,并使用sudo来修改它。

    假设如果你设置foo="bar"变量foo将可以从所有的用户会话中访问。 要测试变量输出的第一个来源呢

    source /etc/environment

  • ~/.profile是你自己用户的个人shell初始化脚本之一。 每个用户都有一个,可以编辑他们的文件,而不会影响他人

  • /etc/profile/etc/profile.d/*.sh是全局初始化脚本,相当于每个用户的~/.profile 。 全局脚本在用户特定的脚本之前执行; 而主要的/etc/profile在退出之前执行/etc/profile.d/所有*.sh脚本。

另外请注意,

  • /etc/environment文件在登录时为每个用户设置系统变量。
  • bash_profile中的命令是在任何用户打开bash shell的情况下执行的。 所以变量不会被设置,除非一个bash shell至少被打开一次。