2011-09-29 140 views
41

我想通过单个命令在Linux中获取Java版本。如何在Linux中使用单行命令获取Java版本

我是新来的awk,所以我试图像

java -version|awk '{print$3}' 

的东西,但是不返回版本。我如何从下面的Java版本输出中获取1.6.0_21

java version "1.6.0_21" 
Java(TM) SE Runtime Environment (build 1.6.0_21-b06) 
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b16, mixed mode) 

回答

73
  1. 重定向错误输出到标准输出。
  2. 获取第一行
  3. 过滤版本号。

    java -version 2>&1 | head -n 1 | awk -F '"' '{print $2}' 
    
+8

少一个过程:'Java的版本2 >&1 | awk -F \''/ version/{print $ 2}' – holygeek

+0

@holygeek:+ 1.nice。 –

+0

@holygeek&John:谢谢您的回答 – abi1964

9

这是一个微小的变化,但PJW的解决方案并没有为我相当的工作:

java -version 2>&1 | head -n 1 | cut -d'"' -f2 

刚刚晋级的分隔符"(双引号)的字符串,并获得第二领域。

3

我建议使用grep -i version来确保你得到包含版本字符串的正确行。如果您设置了环境变量JAVA_OPTIONS,则在打印版本信息之前,openjdk将打印java选项。这个版本返回1.6,1.7等

java -version 2>&1 | grep -i version | cut -d'"' -f2 | cut -d'.' -f1-2 
1

由于(至少在我的Linux系统)版本字符串看起来像“1.8.0_45”:

#!/bin/bash 
function checkJavaVers { 
    for token in $(java -version 2>&1) 
    do 
     if [[ $token =~ \"([[:digit:]])\.([[:digit:]])\.(.*)\" ]] 
     then 
      export JAVA_MAJOR=${BASH_REMATCH[1]} 
      export JAVA_MINOR=${BASH_REMATCH[2]} 
      export JAVA_BUILD=${BASH_REMATCH[3]} 
      return 0 
     fi 
    done 
    return 1 
} 

#test 
checkJavaVers || { echo "check failed" ; exit; } 
echo "$JAVA_MAJOR $JAVA_MINOR $JAVA_BUILD" 
~ 
+0

不错,但在旧版本的bash上,应该引用RE: 'if [[$ token =〜“\”([[:digit:]])\。([[:digit:]])\ 。(。*)\“”]]' –

+0

我没有使用老版本的bash,那不是我的狗。 – gerardw

相关问题