2011-09-29 11 views
41

Voglio recuperare la versione di Java in Linux in un unico comando.Come recuperare la versione di Java utilizzando il comando a linea singola in Linux

Sono nuovo di awk così sto cercando qualcosa di simile

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

Ma che non restituisce la versione. Come posso recuperare lo 1.6.0_21 dall'output della versione Java di sotto?

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) 

risposta

73
  1. Redirect stderr su stdout.
  2. Ottieni prima riga
  3. Filtra il numero di versione.

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

Meno di un unico processo: 'java -version 2 > & 1 | awk -F \ "'/ versione/{stampa $ 2}' – holygeek

+0

@holygeek: + 1.nice. –

+0

@holygeek & John: Grazie per le vostre risposte – abi1964

9

Si tratta di una lieve variazione, ma la soluzione di PJW non ha funzionato per me:

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

appena tagliato la corda sui delimitatori " (virgolette doppie) e ottenere la seconda campo.

3

Si consiglia di utilizzare grep -i version per assicurarsi di ottenere la riga corretta contenente la stringa di versione. Se hai impostato la variabile di ambiente JAVA_OPTIONS, openjdk stamperà le opzioni java prima di stampare le informazioni sulla versione. Questa versione restituisce 1.6, 1.7 ecc

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

Dal momento che (almeno sul mio sistema Linux) la stringa di versione si presenta come "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

Bello, ma su versioni precedenti di bash, la RE deve essere citata: 'if [[$ token = ~" \ "([[: digit:]]). [[: Digit:]]) \ . (. *) \ ""]] ' –

+0

Non sto usando una versione precedente di bash, e non è il mio cane. – gerardw

Problemi correlati