web-dev-qa-db-fra.com

Comment récupérer la version Java à l'aide d'une commande sur une seule ligne sous Linux

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)
42
abi1964
  1. Rediriger stderr vers stdout. 
  2. Obtenir la première ligne 
  3. Filtrer le numéro de version.

    Java -version 2>&1 | head -n 1 | awk -F '"' '{print $2}'
    
78
Prince John Wesley

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.

9
Beauness_Round

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
3
Timothy Aanerud

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"
~
1
gerardw

Obtenir uniquement la version "majeure" #:

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

Cette façon fonctionne pour moi.

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

1.8.0_171
0
Shirish Shukla