web-dev-qa-db-ja.com

Linuxで単一行コマンドを使用してJavaバージョンを取得する方法

LinuxでJavaバージョンを単一のコマンドで取得したい。

私はawkが初めてなので、次のようなことを試みています

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

しかし、それはバージョンを返しません。以下の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)
44
abi1964
  1. Stderrをstdoutにリダイレクトします。
  2. 最初の行を取得
  3. バージョン番号をフィルタリングします。

    Java -version 2>&1 | head -n 1 | awk -F '"' '{print $2}'
    
81

これはわずかなバリエーションですが、PJWのソリューションは私にとってはうまくいきませんでした。

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

区切り文字"(二重引用符)の文字列を切り取り、2番目のフィールドを取得します。

9
Beauness_Round

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
3
Timothy Aanerud

(少なくとも私の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"
~
1
gerardw

--versionを使用できます。その場合、stdoutにリダイレクトする必要はありません。

Java --version | head -1 | cut -f2 -d' '

Javaヘルプから

-version      print product version to the error stream and exit
--version     print product version to the output stream and exit
1
Oo.oO

「メジャー」ビルド番号のみを取得する:

Java -version 2>&1 | head -n 1 | awk -F'["_.]' '{print $3}'
0
bentzy

この方法は私には有効です。

# Java -version 2>&1|awk '/version/ {gsub("\"","") ; print $NF}'

1.8.0_171
0
Shirish Shukla