我刚刚按照教程安装了 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/