2011-09-29 16 views
41

Chcę pobrać wersję Java w systemie Linux za pomocą pojedynczego polecenia.Jak pobrać wersję Java za pomocą polecenia pojedynczego wiersza w systemie Linux

Jestem nowy awk więc próbuję coś jak

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

Ale to nie zwróci wersję. W jaki sposób mogę pobrać 1.6.0_21 z poniższego wyjścia 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) 

Odpowiedz

73
  1. przekierować stderr do stdout.
  2. Uzyskaj pierwszą linię
  3. Przefiltruj numer wersji.

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

Mniej jednego procesu: 'java -version 2 > & 1 | awk -F \ "'/ version/{print $ 2}' – holygeek

+0

@holygeek: + 1.nice. –

+0

@holygeek & John: Dzięki za twoje odpowiedzi – abi1964

9

Jest to niewielka zmiana, ale rozwiązanie PJW nie zrobił dość praca dla mnie:

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

prostu wyciąć ciąg na separator " (cudzysłów) i uzyskać sekundę pole.

3

Proponuję użyć grep -i version, aby upewnić się, że uzyskałeś właściwy wiersz zawierający ciąg wersji. Jeśli masz ustawioną zmienną środowiskową JAVA_OPTIONS, openjdk wydrukuje opcje java przed wydrukowaniem informacji o wersji. Wersja ta zwraca 1.6, 1.7 itd.

java -version 2>&1 | grep -i version | cut -d'"' -f2 | cut -d'.' -f1-2 
1

Od (przynajmniej w moim systemie Linux) ciąg wersja wygląda "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

Ładne, ale w starszych wersjach bash, RE powinno być cytowane: 'if [[$ token = ~" \ "([[: cyfra:]]) \. ([[: Cyfra:]]) \ (. *) \ ""]] ' –

+0

Nie używam starszej wersji basha, a to nie jest mój pies. – gerardw

Powiązane problemy