【问题标题】:How to fetch Java version using single line command in Linux如何在 Linux 中使用单行命令获取 Java 版本
【发布时间】:2011-11-27 15:05:23
【问题描述】:

我想在一个命令中获取 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)

【问题讨论】:

    标签: linux parsing version


    【解决方案1】:
    1. 将标准错误重定向到标准输出。
    2. 获取第一行
    3. 过滤版本号。

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

    【讨论】:

    • 少一个进程:`java -version 2>&1|awk -F\" '/version/ {print $2}'
    • @holygeek & John:谢谢你的回答
    • @holygeek: & John: 命令在AIX 机器中失败,说awk: can't open {print$2}。可能是什么问题?
    • @Simon:这可能是引号转义问题。
    • java -version 2>&1 | head -n 1 | awk -F '"' '{print $2}' | awk -F '.' '{print $2}' 如果您只想要主要版本号。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 不错,但在旧版本的 bash 上,应该引用 RE:if [[ $token =~ "\"([[:digit:]])\.([[:digit:]])\.(.*)\"" ]]
        • 我没有使用旧版本的 bash,那不是我的狗。
        【解决方案5】:

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

        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
        

        【讨论】:

        • 哪些操作系统和哪些 Java 版本?不适用于 Ubuntu 16.04 和 Java 8。
        【解决方案6】:

        只获取“主要”构建#:

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

        【讨论】:

          【解决方案7】:

          这种方式适合我。

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

          【讨论】:

            【解决方案8】:

            这是我的变体(在此之前感谢/确认许多答案)。我的目标是制作符合JEP 223 的“主要版本”。作出假设;我不知道它是否适用于所有已发布(或即将发布)的 java 版本。

            java -version 2>&1 | fgrep -i version | cut -d'"' -f2 | sed -e 's/^1\./1\%/' -e 's/\..*//' -e 's/%/./'
            
            Version Results
            1.6.0_65 1.6
            1.8.0_282 1.8
            11.0.10 11
            15.0.2 15

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-01-30
              • 2010-12-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多