Ответ 1
- Перенаправить stderr в stdout.
- Получить первую строку
-
Отфильтровать номер версии.
java -version 2>&1 | head -n 1 | awk -F '"' '{print $2}'
Я хочу получить версию 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)
Отфильтровать номер версии.
java -version 2>&1 | head -n 1 | awk -F '"' '{print $2}'
Это небольшая вариация, но решение PJW не очень сработало для меня:
java -version 2>&1 | head -n 1 | cut -d'"' -f2
просто отрежьте строку на разделителе "
(двойные кавычки) и получите второе поле.
Я бы предложил использовать 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
Так как (по крайней мере, в моей 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"
~
Получение только "основной" сборки #:
java -version 2>&1 | head -n 1 | awk -F'["_.]' '{print $3}'
Этот способ работает для меня.
# java -version 2>&1|awk '/version/ {gsub("\"","") ; print $NF}'
1.8.0_171
Вы можете использовать --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