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)
バージョン番号をフィルタリングします。
Java -version 2>&1 | head -n 1 | awk -F '"' '{print $2}'
これはわずかなバリエーションですが、PJWのソリューションは私にとってはうまくいきませんでした。
Java -version 2>&1 | head -n 1 | cut -d'"' -f2
区切り文字"
(二重引用符)の文字列を切り取り、2番目のフィールドを取得します。
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
(少なくとも私の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"
~
--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
「メジャー」ビルド番号のみを取得する:
Java -version 2>&1 | head -n 1 | awk -F'["_.]' '{print $3}'
この方法は私には有効です。
# Java -version 2>&1|awk '/version/ {gsub("\"","") ; print $NF}'
1.8.0_171