2011-09-29 40 views
41

Tôi muốn tìm nạp phiên bản Java trong Linux bằng một lệnh duy nhất.Cách lấy phiên bản Java bằng cách sử dụng lệnh dòng đơn trong Linux

Tôi mới vào awk vì vậy tôi đang cố gắng một cái gì đó giống như

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

Nhưng điều đó không trả lại phiên bản. Làm cách nào để tìm nạp 1.6.0_21 từ đầu ra phiên bản Java dưới đây?

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) 

Trả lời

73
  1. Chuyển hướng stderr sang stdout.
  2. Lấy dòng đầu tiên
  3. Lọc số phiên bản.

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

Ít một quá trình: 'java -version 2 > & 1 | awk -F \ "'/ phiên bản/{print $ 2}' – holygeek

+0

@holygeek: + 1.nice. –

+0

@holygeek & John: Cảm ơn câu trả lời của bạn – abi1964

9

Đây là sự thay đổi nhỏ, nhưng giải pháp PJW đã làm không hoàn toàn công việc cho tôi:

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

chỉ cần cắt các chuỗi trên delimiter " (dấu ngoặc kép) và nhận được thứ hai cánh đồng.

3

Tôi khuyên bạn nên sử dụng grep -i version để đảm bảo bạn nhận đúng dòng chứa chuỗi phiên bản. Nếu bạn đã đặt biến môi trường JAVA_OPTIONS, openjdk sẽ in các tùy chọn java trước khi in thông tin phiên bản. Phiên bản này trả về 1.6, 1,7, vv

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

Kể từ (ít nhất là trên hệ thống Linux của tôi) chuỗi phiên bản trông giống như "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

Rất tốt, nhưng trên các phiên bản bash cũ, RE phải được trích dẫn: 'if [[$ token = ~" \ "([[: chữ số:]]) \. ([[: Chữ số:]]) \ . (. *) \ ""]] ' –

+0

Tôi không sử dụng phiên bản cũ của bash, và đó không phải là con chó của tôi. – gerardw

Các vấn đề liên quan