如何在Linux中使用单行命令获取Java版本

fzsnzjdm  于 2023-03-07  发布在  Linux
关注(0)|答案(9)|浏览(120)

我想用一个命令获取Linux中的Java版本。
我是awk的新手,所以我尝试了类似

java -version|awk '{print$3}'

但这并不返回版本号,我如何从下面的Java版本输出中获取1.6.0_21

java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b06)
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b16, mixed mode)
u7up0aaq

u7up0aaq1#

1.将标准错误重定向到标准输出。
1.获取第一行
1.筛选版本号。

java -version 2>&1 | head -n 1 | awk -F '"' '{print $2}'
uemypmqf

uemypmqf2#

这是一个微小的变化,但PJW的解决方案并不完全适合我:

java -version 2>&1 | head -n 1 | cut -d'"' -f2

只需剪切分隔符"(双引号)上的字符串,并获取第二个字段。

v7pvogib

v7pvogib3#

我建议使用grep -i version来确保你得到正确的包含版本字符串的行。如果你设置了环境变量JAVA_OPTIONS,openjdk会在打印版本信息之前打印java选项。这个版本返回1.6,1.7等等。

java -version 2>&1 | grep -i version | cut -d'"' -f2 | cut -d'.' -f1-2
xytpbqjk

xytpbqjk4#

因为(至少在我的Linux系统上)版本字符串看起来像“1.8.0_45”:

#!/bin/bash
 function checkJavaVers {
    for token in $(java -version 2>&1)
    do
        if [[ $token =~ \"([[:digit:]])\.([[:digit:]])\.(.*)\" ]]
        then
            export JAVA_MAJOR=${BASH_REMATCH[1]}
            export JAVA_MINOR=${BASH_REMATCH[2]}
            export JAVA_BUILD=${BASH_REMATCH[3]}
            return 0
        fi
    done
    return 1
}

#test
checkJavaVers || { echo "check failed" ; exit; }
echo "$JAVA_MAJOR $JAVA_MINOR $JAVA_BUILD"
~
j9per5c4

j9per5c45#

您可以使用--version,在这种情况下,不需要重定向到stdout

java --version | head -1 | cut -f2 -d' '

来自Java帮助

-version      print product version to the error stream and exit
--version     print product version to the output stream and exit
w7t8yxp5

w7t8yxp56#

这是我的变体(感谢之前的许多回答)。我的目标是产生一个符合JEP 223的“主版本”。我不知道它是否适用于所有已发布(或即将发布)的java版本。

java -version 2>&1 | fgrep -i version | cut -d'"' -f2 | sed -e 's/^1\./1\%/' -e 's/\..*//' -e 's/%/./'

| 版本|结果|
| - ------|- ------|
| 1.6.0_65|1.6岁|
| 1.8.0_282|1.8岁|
| 十一月十日|十一|
| 第十五章|十五|

4urapxun

4urapxun7#

这条路适合我。

# java -version 2>&1|awk '/version/ {gsub("\"","") ; print $NF}'

1.8.0_171
umuewwlo

umuewwlo8#

java -version 2>&1 | head -1 | awk -F '_|"' '{print $2}'

产出

1.8.0

或者

java -version 2>&1 | head -1 | awk -F '_|"' '{print $2}' | cut -c 1-3

产出

1.8
yx2lnoni

yx2lnoni9#

仅获取“主要”构建版本号:

java -version 2>&1 | head -n 1 | awk -F'["_.]' '{print $3}'

相关问题