2011-09-29 5 views
41

단일 명령으로 Linux에서 Java 버전을 가져 오려고합니다.Linux에서 단일 행 명령을 사용하여 Java 버전을 가져 오는 방법

나는 내가

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

같은 것을 시도하고 AWK 새로운 오전하지만 그 버전을 반환하지 않습니다. 아래의 Java 버전 출력에서 ​​1.6.0_21을 어떻게 가져 옵니까? 표준 출력으로

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) 

답변

73
  1. 리디렉션 표준 에러.
  2. 첫 줄 가져 오기
  3. 버전 번호를 필터링하십시오.

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

적은 하나 개의 프로세스 :'자바 -version 2 > & 1 | awk -F \ " '/ version/{print $ 2}' – holygeek

+0

@holygeek : + 1.nice –

+0

@holygeek & John : 답변 해 주셔서 감사합니다 – abi1964

9

이 약간의 변화이지만, PJW의 솔루션은 나를 위해 잘 작동하지 않았다 :

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

단지 구분 " (큰 따옴표)에 문자열을 잘라 두 번째를 얻을 수 들.

3

나는 grep -i version을 사용하여 버전 문자열이 포함 된 올바른 행을 가져와야합니다. 환경 변수 JAVA_OPTIONS가 설정되어있는 경우, openjdk는 버전 정보를 인쇄하기 전에 java 옵션을 인쇄합니다. 이 버전은 1.6 반환 1.7 등

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

(적어도 내 리눅스 시스템) 버전 문자열은 "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

이전 버전의 bash에서는 RE가 따옴표로 묶여 야합니다 : if [[$ token = ~ "\"([[: digit :]]) \. ([[: digit :]]) \ (. *) \ ""]]' –

+0

나는 bash의 이전 버전을 사용하고 있지 않으며 그것은 내 강아지가 아닙니다. – gerardw

관련 문제