2011-09-29 2 views
41

LinuxでJavaバージョンを1つのコマンドで取得したいとします。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. stdoutに標準エラー出力をリダイレクトします。
  2. 最初の行を取得
  3. バージョン番号をフィルタします。

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

レスつのプロセス: 'javaの-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

(少なくとも私のLinuxシステム上の)バージョン文字列は "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

関連する問題