对 PATH 感到困惑

对 PATH 感到困惑

我修改了 ~/.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 在哪里寻找javaPATH这样做),它被各种应用程序使用。

我建议整理一下你的PATH变量(也许从那里放弃备份内容)。对于运行 Java 的应用程序,大多数应用程序(以正确方式开发的应用程序)都引用JAVA_HOME。这意味着它们将使用java指示的JAVA_HOME,而从 shell 运行的程序java将被重定向到 指示的最后一个位置PATH

可能会看起来有点令人困惑,当您想要java从 shell 手动调试任何相关内容时,情况会变得更糟。

相关内容