उबंटू: दूसरे कमांड के आउटपुट को रन करें


13

मेरे पास कमांड लाइन है जो एक अलग कमांड लाइन आउटपुट करती है, उदाहरण के लिए:

> commandlineA param1 param2
  commandlineB param1

मैं एक एकल कमांड लाइन का निष्पादन करना चाहता हूं जो दिए गए पैरामीटर (एस) के साथ कमांडलाइन को चलाएगा।

क्या ऐसा करने का कोई सरल तरीका है कि एकल कमांड लाइन का उपयोग करना या मुझे एक छोटी सी bash फ़ाइल चलाने की आवश्यकता है जो आउटपुट को एक चर में संग्रहीत करेगी और फिर उसे चलाएगी?

धन्यवाद


2
काफी समय से खोजा जा रहा है, लेकिन मुझे लगता है कि मुझे अपने आप को खोजने के लिए एक प्रश्न पोस्ट करना पड़ा .... $ (कमांडलाइन param1 param2) ने काम किया।
लाइर ओहाना

जवाबों:


17

आपको लगता है कि इसने स्वयं काम किया है, लेकिन आप इसका उपयोग कर सकते हैं:

$(command parameter1 parameter2)

संपादन संपादित करें: नीचे कुछ गलत है, जबकि यह कमांड को उप-क्रम में चलाता है, यह पता चलता है कि पर्यावरण चर अभी भी उपलब्ध होंगे। लोगों को गुमराह करने के लिए क्षमा करें ...

संपादित करें: जो एक सब-टाइम में चलेगा, किसी भी अनएक्सपोर्टेड पर्यावरण चर का उपयोग नहीं किया जाएगा। यदि आप एक ही शेल में कमांड चलाना चाहते हैं, तो आपको उपयोग करने की आवश्यकता है:

eval $(command parameter1 parameter2)

दिए गए एक अन्य उत्तर को बैश के माध्यम से पाइप करना है:

echo 'uname -a' | bash 

यह भी एक उपधारा में निष्पादित करेगा, उसी शेल में चलाने के लिए जिसे आपको आवश्यकता होगी:

echo 'uname -a' | bash -c

संयोग से, आप $ () सिंटैक्स के बजाय बैक टिक्स का भी उपयोग कर सकते हैं, लेकिन यह अनुशंसित नहीं है


(1) मुझे ठीक-ठीक नहीं मालूम है कि आपका मतलब क्या है "जो एक सब-वे में चलेगा"। गैर-पंजीकृत पर्यावरण चर का उपयोग किया जाएगा । (२) मुझे evalयहाँ उपयोग करने का कोई कारण नहीं दिख रहा है । यदि आपके पास कोई कारण है, तो कृपया उसे समझाएं। (३) आपका अंतिम उदाहरण (साथ  -c) पूरी तरह से गलत है।
स्कॉट

आप सही हैं, मैंने फिर से जाँच की और मैं वहाँ गलत था। सूची के रूप में चलने पर, बैश शेल कांटे और पर्यावरण चर अभी भी उपलब्ध हैं। तो आप सही हैं, इस बारे में खेद है।
क्रिस शर्लक

4

इसे इस्तेमाल करो:

commandlineA param1 param2 | bash

उदाहरण:

echo "uname -a" | bash

आउटपुट:

लिनक्स k1104 2.6.38-8-जेनेरिक # 42-Ubuntu एसएमपी मोन अप्रैल 11 03:31:50 UTC 2011 i686 i686 i386 GNU / Linux

इसमें कुछ भी गलत नहीं है, हालांकि यह एक और बैश शेल को फैलाएगा।
क्रिस शरलॉक

तो होगा$(commandlineA param1 param2)
ट्रिपल

@tripleee: आप संतरे और कद्दू की तुलना कर रहे हैं।  printf '\143\144\040\057\n' | bashआखिरकार एक नो-ऑप है, क्योंकि कमांड को एक नई, अलग (और क्षणिक) शेल प्रक्रिया में निष्पादित किया जाता है। इसके विपरीत, $(printf '\143\144\040\057\n')निर्देशिका को बदलने के लिए वर्तमान, सक्रिय, इंटरैक्टिव शेल का कारण होगा।
स्कॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.