Je veux récupérer la version Java sous Linux en une seule commande.
Je suis nouveau à awk alors j'essaie quelque chose comme
Java -version|awk '{print$3}'
Mais cela ne retourne pas la version. Comment pourrais-je récupérer le 1.6.0_21
de la sortie de la version Java ci-dessous?
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)
Filtrer le numéro de version.
Java -version 2>&1 | head -n 1 | awk -F '"' '{print $2}'
C'est une légère variation, mais la solution de PJW n'a pas fonctionné pour moi:
Java -version 2>&1 | head -n 1 | cut -d'"' -f2
il suffit de couper la chaîne sur le délimiteur "
(guillemets doubles) et d’obtenir le deuxième champ.
Je suggérerais d'utiliser grep -i version
pour vous assurer d'obtenir la bonne ligne contenant la chaîne de version. Si vous avez défini la variable d'environnement Java_OPTIONS, openjdk imprimera les options Java avant d'imprimer les informations de version. Cette version renvoie 1.6, 1.7 etc.
Java -version 2>&1 | grep -i version | cut -d'"' -f2 | cut -d'.' -f1-2
Depuis (du moins sur mon système Linux), la chaîne de version ressemble à "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"
~
Obtenir uniquement la version "majeure" #:
Java -version 2>&1 | head -n 1 | awk -F'["_.]' '{print $3}'
Cette façon fonctionne pour moi.
# Java -version 2>&1|awk '/version/ {gsub("\"","") ; print $NF}'
1.8.0_171