Как получить версию Java с помощью однострочной команды в Linux - PullRequest
43 голосов
/ 29 сентября 2011

Я хочу получить версию Java в Linux одной командой.

Я новичок в awk, поэтому я пытаюсь что-то вроде

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

Но это не возвращает версию. Как мне получить 1.6.0_21 из приведенного ниже вывода версии Java?

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)

Ответы [ 7 ]

80 голосов
/ 29 сентября 2011
  1. Перенаправить stderr на стандартный вывод.
  2. Получить первую строку
  3. Отфильтровать номер версии.

    java -version 2>&1 | head -n 1 | awk -F '"' '{print $2}'
    
9 голосов
/ 24 июля 2012

Это небольшое отклонение, но решение PJW не совсем для меня:

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

просто обрежьте строку в разделителе " (двойные кавычки) и получите второе поле.

3 голосов
/ 07 декабря 2014

Я бы предложил использовать 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
1 голос
/ 15 августа 2015

Поскольку (по крайней мере, в моей системе 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"
~
0 голосов
/ 23 мая 2019

Вы можете использовать --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
0 голосов
/ 02 августа 2018

Этот способ работает для меня.

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

1.8.0_171
0 голосов
/ 12 июня 2018

Получение только "основной" сборки #:

java -version 2>&1 | head -n 1 | awk -F'["_.]' '{print $3}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...