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

发布于 2024-12-07 08:11:31 字数 351 浏览 1 评论 0原文

我想通过单个命令获取 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)

I want to fetch the Java version in Linux in a single command.

I am new to awk so I am trying something like

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

But that does not return the version. How would I fetch the 1.6.0_21 from the below Java version output?

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

野稚 2024-12-14 08:11:32

这是我的变体(感谢/致谢之前的许多答案)。我的目标是生成一个符合 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_651.6
1.8.0_2821.8
11.0.1011
15.0.215

Here's my variation (with thanks/acknowledgements to many answers prior to this). My goal is to produce a "Major Version" in line with JEP 223. Assumption are made; I don't know if it works across the board for all released (or to be released) versions of java.

java -version 2>&1 | fgrep -i version | cut -d'"' -f2 | sed -e 's/^1\./1\%/' -e 's/\..*//' -e 's/%/./'
VersionResults
1.6.0_651.6
1.8.0_2821.8
11.0.1011
15.0.215
望她远 2024-12-14 08:11:32

这种方法对我有用。

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

1.8.0_171

This way works for me.

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

1.8.0_171
偏爱你一生 2024-12-14 08:11:32
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
java -version 2>&1 | head -1 | awk -F '_|"' '{print $2}' 

Output

1.8.0

Or

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

Output

1.8
醉态萌生 2024-12-14 08:11:32

仅获取“主要”版本#:

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

Getting only the "major" build #:

java -version 2>&1 | head -n 1 | awk -F'["_.]' '{print $3}'
帝王念 2024-12-14 08:11:31
  1. 将 stderr 重定向到 stdout。
  2. 获取第一行
  3. 过滤版本号。

    java -版本 2>&1 |头 -n 1 | awk -F '"' '{print $2}'
    
  1. Redirect stderr to stdout.
  2. Get first line
  3. Filter the version number.

    java -version 2>&1 | head -n 1 | awk -F '"' '{print $2}'
    
累赘 2024-12-14 08:11:31

这是一个细微的变化,但 PJW 的解决方案对我来说不太有效:

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

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

This is a slight variation, but PJW's solution didn't quite work for me:

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

just cut the string on the delimiter " (double quotes) and get the second field.

妥活 2024-12-14 08:11:31

我建议使用 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

I'd suggest using grep -i version to make sure you get the right line containing the version string. If you have the environment variable JAVA_OPTIONS set, openjdk will print the java options before printing the version information. This version returns 1.6, 1.7 etc.

java -version 2>&1 | grep -i version | cut -d'"' -f2 | cut -d'.' -f1-2
清风疏影 2024-12-14 08:11:31

因为(至少在我的 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"
~

Since (at least on my linux system) the version string looks like "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"
~
╭⌒浅淡时光〆 2024-12-14 08:11:31

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

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

来自 java help

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

You can use --version and in that case it's not required to redirect to stdout

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

From java help

-version      print product version to the error stream and exit
--version     print product version to the output stream and exit
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文