2011-09-29 88 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

相關問題