我修改了 ~/.bashrc 文件中的 PATH 最后两行是:
export JAVA_HOME="/usr/lib/jvm/jdk-16"
export PATH=/usr/lib/jvm/jdk-16/bin/java:/usr/lib/jvm/jdk-16/bin/javac:$PATH
我打开了一个新的终端并输入了一些命令,结果是:
user@user-Vostro-3669:~$ echo $PATH
/usr/lib/jvm/jdk-16/bin/java:/usr/lib/jvm/jdk-16/bin/javac:/disk2/BACKUP_OLD_MACHINE/NEW4_mnt_newdisk_VC/NEW4/JAVA_JDK/jdk1.8.0_25/bin:/home/user/ROJA_LAKSHMI/BABITA/TERMSUITE/cmd:/home/user/ROJA_LAKSHMI/BABITA/TERMSUITE/bin:/home/user/ROJA_LAKSHMI/BEDREST/HPSG_ACE_ERG/ace-0.9.31/:/home/user/PROGRAMMING_STYLES/EXPERT_SYSTEM/clips_core_source_630/core:/home/user/.local/bin:/home/user/HASKELL/GHC_8.6.4/ghc-8.6.4/bin:/home/user/.local/bin:/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
user@user-Vostro-3669:~$ echo $JAVA_HOME
/usr/lib/jvm/jdk-16
user@user-Vostro-3669:~$ which java
/disk2/BACKUP_OLD_MACHINE/NEW4_mnt_newdisk_VC/NEW4/JAVA_JDK/jdk1.8.0_25/bin/java
user@user-Vostro-3669:~$ java -version
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
user@user-Vostro-3669:~$ /usr/lib/jvm/jdk-16/bin/java -version
java version "16" 2021-03-16
Java(TM) SE Runtime Environment (build 16+36-2231)
Java HotSpot(TM) 64-Bit Server VM (build 16+36-2231, mixed mode, sharing
我的困惑是为什么我没有得到预期的结果?
我期望看到:
java version "16" 2021-03-16
当我发出命令时:
java -version
可能出了什么问题?
答案1
该$PATH
变量列出了目录搜索可执行文件,而不是文件自己。因此:
export PATH=/usr/lib/jvm/jdk-16/bin/java:/usr/lib/jvm/jdk-16/bin/javac:$PATH
应改为:
export PATH=/usr/lib/jvm/jdk-16/bin:$PATH
答案2
为方便起见已格式化...
echo $PATH
/usr/lib/jvm/jdk-16/bin/java:/usr/lib/jvm/jdk-16/bin/javac:/disk2/BACKUP_OLD_MACHINE/NEW4_mnt_newdisk_VC/NEW4/JAVA_JDK/jdk1.8.0_25/bin:/home/user/ROJA_LAKSHMI/BABITA/TERMSUITE/cmd:/home/user/ROJA_LAKSHMI/BABITA/TERMSUITE/bin:/home/user/ROJA_LAKSHMI/BEDREST/HPSG_ACE_ERG/ace-0.9.31/:/home/user/PROGRAMMING_STYLES/EXPERT_SYSTEM/clips_core_source_630/core:/home/user/.local/bin:/home/user/HASKELL/GHC_8.6.4/ghc-8.6.4/bin:/home/user/.local/bin:/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
PATH
定义查找可执行文件的位置和顺序。
从您的示例中可以看出,/disk2/BACKUP_OLD_MACHINE/NEW4_mnt_newdisk_VC/NEW4/JAVA_JDK/jdk1.8.0_25/bin
这是找到可执行文件的最新(更新)位置java
,并且正在使用中。
JAVA_HOME
只是另一个变量,但是这个变量并没有告诉 shell 在哪里寻找java
(PATH
这样做),它被各种应用程序使用。
我建议整理一下你的PATH
变量(也许从那里放弃备份内容)。对于运行 Java 的应用程序,大多数应用程序(以正确方式开发的应用程序)都引用JAVA_HOME
。这意味着它们将使用java
指示的JAVA_HOME
,而从 shell 运行的程序java
将被重定向到 指示的最后一个位置PATH
。
可能会看起来有点令人困惑,当您想要java
从 shell 手动调试任何相关内容时,情况会变得更糟。