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 -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

한 가지 해결책은 끝에 날짜를 제거하는 것입니다 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/

관련 정보