BashスクリプトでJavaメジャーバージョンを確認する

BashスクリプトでJavaメジャーバージョンを確認する

私はチュートリアルに従ってKafkaをインストールしました。shスクリプトエラーのため起動しません。

$ sudo kafka-server-start.sh /etc/kafka.properties
/opt/Kafka/kafka_2.12-1.1.0/bin/kafka-run-class.sh: line 252: [[: 10 2018-04-17: syntax error in expression (error token is "2018-04-17")
[0.000s][warning][gc] -Xloggc is deprecated. Will use -Xlog:gc:/opt/Kafka/kafka_2.12-1.1.0/bin/../logs/kafkaServer-gc.log instead.
Unrecognized VM option 'PrintGCDateStamps'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

252行目を確認してください。

if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]] ; then

echo詳細については、以下を追加しました。

JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([^.-]*).*"/\1/p')
echo "JAVA_MAJOR_VERSION: $JAVA_MAJOR_VERSION"
if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]] ; then

出力は次のように変更されます。

JAVA_MAJOR_VERSION: 10 2018-04-17

私のJava:

$ java -version
openjdk version "10.0.1" 2018-04-17

質問

JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([^.-]*).*"/\1/p')Kafkaスターターを変更するにはどうすればいいですか?

答え1

1つの解決策は最後に日付を削除することですcut。このアプローチの結果は次のとおりです。

JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([^.-]*).*"/\1/p' | cut -d' ' -f1)

このメソッドは空白文字(-d'')に分割され、最初のフィールドが取得されます。入力によって、openjdkに追加された日付が削除されます。

答え2

これは、古い「1.xy」形式だけでなく、最新の「xy」形式でも機能します。

java -version 2>&1 \
  | head -1 \
  | cut -d'"' -f2 \
  | sed 's/^1\.//' \
  | cut -d'.' -f1

源泉:https://odoepner.wordpress.com/2014/07/27/get-java-version-string-via-shell-commands/

関連情報