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