Bash
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 啟動器?
一種解決方案是使用
cut
. 這種方法將導致:JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([^.-]*).*"/\1/p' | cut -d' ' -f1)
這種方法在空格字元 (-d’ ‘) 上拆分並採用第一個欄位。根據輸入,這將刪除 openjdk 附加日期。
這適用於較舊的“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/