$ (Java -version) को एक bash वैरिएबल में स्टोर करें


0

जब मैं ऐसा करता हूं: $ var=$(java -version)मेरे बैश टर्मिनल पर, varहमेशा खाली रहता है? $ java -version >> version.txtकुछ भी नहीं के साथ एक ही चीज को version.txt फ़ाइल में भेजा जाता है।

जवाबों:


3

कमांड आमतौर पर ऐसी जानकारी STDERR को भेजती है, STDOUT को नहीं। तो आपके मामले में आपको कमांड का उपयोग करना चाहिए जैसे:

java -version >>version.txt 2>&1

तथा

var=$((java -version) 2>&1)

1
मुझे नहीं पता कि आपने आंतरिक कोष्ठकों को गोल क्यों रखा है java -version: वे अनावश्यक हैं और अनावश्यक रूप से आगे उप-आह्वान करते हैं।
AFH

3

जैसा कि रोमियो ने इशारा किया है, stderoutjava -version में लिखते हैं , stdout में नहीं , इसलिए आपको उपयोग करना चाहिए:

var=$(java -version 2>&1)

यदि आप केवल संस्करण और java -versionकमांड के सभी आउटपुट नहीं प्राप्त करना चाहते हैं , तो उदाहरण के लिए स्क्रिप्टिंग के लिए अधिक आश्वस्त, आप कुछ का उपयोग कर सकते हैं:

var=$(java -version 2>&1 | awk -F '"' 'NR==1 {print $2}')

व्याख्या

  1. java -versionजावा संस्करण संदेश stderr में प्रिंट करता है
  2. 2>&1पुनर्निर्देश stderr करने के लिए stdout
  3. | लेफ्टहैंड कमांड आउटपुट लेता है और राइटहैंड कमांड के लिए इनपुट के रूप में उपयोग करता है
  4. awk -F '"' 'NR==1 {print $2}' थोड़ा और अधिक जटिल है, लेकिन मूल रूप से यह इनपुट को भागों में विभाजित करता है, जिससे आप प्रत्येक भाग को अलग-अलग संचालित कर सकते हैं (सबसे अधिक जानकार शायद मुझे शेरों को फेंक देगा, यह बहुत बुरा सारांश है कि क्या है और क्या करता है )।
    • awkविभाजन के लिए जो चरित्र -Fहोता है, वह विकल्प द्वारा निर्दिष्ट किया जाता है, इस मामले में यह चरित्र द्वारा विभाजित होता है"
    • अंतिम भाग निर्दिष्ट करता है कि परिणामी विभाजन {print $2}की पहली पंक्ति ( NR==1) से केवल दूसरा तत्व ( ) मुद्रित होना चाहिए।

यह कुछ इस तरह उत्पादन होगा 1.8.0_191


1
स्पष्टीकरण के लिए धन्यवाद। मैं सोच रहा हूं कि जावा STDOUT के बजाय STDERR का उपयोग क्यों करता है और आप इसे कैसे जानते हैं?
अकुमा a
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.