2011-09-29 8 views
41

Quiero buscar la versión de Java en Linux en un solo comando.Cómo recuperar la versión de Java utilizando el comando de una sola línea en Linux

Soy nuevo en awk así que estoy tratando algo así como

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

Pero eso no devuelve la versión. ¿Cómo puedo obtener el 1.6.0_21 del siguiente resultado de la versión de 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) 

Respuesta

73
  1. redirección stderr a stdout.
  2. Obtenga la primera línea
  3. Filtre el número de versión.

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

Menos de un proceso: 'java -version 2 > & 1 | awk -F \ "'/ version/{print $ 2}' – holygeek

+0

@holygeek: + 1.nice. –

+0

@holygeek & John: Gracias por sus respuestas – abi1964

9

Esta es una ligera variación, pero la solución de PJW no funcionó bastante para mí:

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

acaba de cortar la cadena en el delimitador " (comillas dobles) y obtener el segundo campo.

3

Sugeriría usar grep -i version para asegurarse de obtener la línea correcta que contiene la cadena de versión. Si tiene configurada la variable de entorno JAVA_OPTIONS, openjdk imprimirá las opciones de java antes de imprimir la información de la versión. Esta versión vuelve 1.6, 1.7, etc.

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

Puesto que (al menos en mi sistema Linux) la cadena de versión se parece a "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

Bueno, pero en versiones anteriores de bash, la RE debe ser citada: 'if [[$ token = ~" \ "([[: digit:]]) \. ([[: Digit:]]) \ . (. *) \ ""]] ' –

+0

No estoy usando una versión anterior de bash, y ese no es mi perro. – gerardw

Cuestiones relacionadas