我们在工作中使用各种旧版本的Java 1.6,由于我无法控制的各种原因而无法更新。
某些支持-XX:ReduceInitialCardMarks,有些则不支持,如果您尝试使用不受支持的选项,则退出。
我想要一个shell脚本,它使用-XX:ReduceInitialCardMarks选项调用java(如果可用),否则没有。
我尝试/考虑过的事情
到目前为止最好的方法是,在使用-version调用时忽略无法识别的VM选项的输出,注意-version必须在参数之后,否则它不会测试它。
if java -XX:-ReduceInitialCardMarks -version 2>&1 | grep -q 'Unrecognized VM option'; then echo "Not supported"; else echo "Supported"; fi
有没有干净的方法呢?
答案 0 :(得分:2)
在我的机器上执行
java -XX:+ReduceInitialCardMarks -version
返回0和版本信息(因为支持该选项),并执行
java -XX:+NoSuchOption -version
在stderr上返回1并显示一些错误消息。如果这适用于您的Java版本,那么您只需执行
if java -XX:+ReduceInitialCardMarks -version; then
echo "Supported"
else
echo "Unsupported"
fi
答案 1 :(得分:0)
您可以尝试以下方式:
if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then
_java="$JAVA_HOME/bin/java"
if [[ "$_java" ]]; then
version=$("$_java" -version 2>&1 | awk -F '"' '/version/ {print $2}')
echo version "$version"
if [[ "$version" > "1.6" ]]; then
# do work
else
echo version is less than 1.6
exit
fi
fi