在系统路径中查找所有 Java 版本

Find all Java versions in the system path

我需要知道一个命令来在系统路径中找到 Java 的所有版本。我知道 which -a java 会打印在系统路径中可以找到 java 可执行文件的所有位置,但我想获取每个这些可执行文件的版本信息。

which -a java | xargs -I{} echo "echo {};{} -version;echo" | sh

这将打印在系统路径中找到的每个 java 可执行文件的路径,以及该可执行文件的版本信息,并用换行符分隔条目。它是这样工作的:

  1. which -a java 的输出通过管道传输到 xargs
  2. 使用xargs -I{} echo构造bash命令,将which输入的每一行替换{}
  3. 将构建的 bash 命令通过管道传输到系统的默认 shell 执行器中。

我机器上的样本输出给出了

/usr/bin/java
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

/usr/lib/jvm/java-8-oracle/bin/java
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

请注意,如果您想知道不同可执行文件的版本,您可以修改构建的 bash 命令以适当地打印版本信息。例如。如果你想知道 python 的所有版本,你可以 运行

which -a python | xargs -I{} echo "echo {};{} --version;echo" | sh