centos 登录时,~/bash_profile中的$JAVA_HOME路径来源不正确

bvjxkvbb  于 2022-11-07  发布在  Java
关注(0)|答案(3)|浏览(198)

登录到CentOS 7虚拟机时,我的$JAVA_HOME始终设置为:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre,这是不正确的。
我的~/.bash_个人资料如下:


# .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中指定的目录?

cu6pst1q

cu6pst1q1#

每次打开一个新终端时,查找.bash_profile似乎可以解决这个问题,但为什么启动时我的$JAVA_HOME路径默认为旧版本,而不是设置为.bash_profile中指定的目录?
您需要从当前用户注销并重新登录,以便环境变量更改生效。

可能有用

在Bash中:

  • 作为登录shell的Bash将按顺序加载/etc/profile~/.bash_profile~/.bash_login~/.profile
  • Bash作为非登录交互式环境将加载~/.bashrc
    环境:
  • 使用/etc/environment为所有用户永久设置系统范围(所有用户、所有进程)的环境变量。

/etc/environment是一个系统范围的配置文件,这意味着它由所有用户使用。但是它由root所有,所以你需要是一个admin用户并使用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 shell被任何用户打开,bash_profile中的命令就会被执行。因此,除非bash shell至少被打开一次,否则不会设置变量。
jogvjijk

jogvjijk2#

1.在交互式环境中运行ps,确保您处于bash中。
1.登录后尝试bash -l,看看它是否能解决您的问题。
1.在JAVA_HOME=...之前添加set -x,以检查是否存在错误。

d8tt03nd

d8tt03nd3#

"这对我很有效"
在我的情况下,以下导致了错误:
export JAVA_HOME = /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home
错误是=前后有空格。删除这些空格后,错误消失。
所以正确的命令如下:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home

相关问题