在登录时〜/ bash_profile中未正确获取$ JAVA_HOME路径

时间:2017-10-11 03:36:25

标签: java linux bash centos java-home

登录我的CentOS 7 VM后,我的$ 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

每次打开新终端时出现.bash_profile似乎都可以解决问题,但为什么我的$ JAVA_HOME路径在启动时默认为旧版本而未设置为.bash_profile中指定的目录?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

  

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

您需要从当前用户退出并再次登录,以便进行环境变量更改。

可能有用

在Bash中:

  • Bash as login 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在退出之前执行*.sh中的所有/etc/profile.d/脚本。

另请注意,

  • /etc/environment文件为登录时的每个用户设置变量系统范围。
  • 如果任何用户打开bash shell,则执行bash_profile中的命令。因此,除非至少打开一次bash shell,否则不会设置变量。