कमांड लाइन तर्कों और मानक इनपुट के बीच एक अंतर है। एक पाइप एक प्रक्रिया के मानक आउटपुट को दूसरे के मानक इनपुट से जोड़ेगा। इसलिए
ls | echo
इको के मानक इनपुट के लिए ls के मानक आउटपुट को जोड़ता है। ठीक है ना? खैर, प्रतिध्वनि मानक इनपुट को नजरअंदाज करती है और इसके कमांड लाइन तर्कों को डंप करेगी - जो इस मामले में कोई भी नहीं हैं - अपने स्वयं के स्टडआउट। आउटपुट: कुछ भी नहीं।
इस मामले में कुछ समाधान हैं। एक कमांड का उपयोग करना है जो स्टडिन को पढ़ता है और स्टडआउट को डंप करता है, जैसे कि बिल्ली।
ls | cat
'काम' होगा, जो आपके काम की परिभाषा पर निर्भर करता है।
लेकिन सामान्य मामले के बारे में क्या। आप वास्तव में क्या चाहते हैं कि एक कमांड के स्टडआउट को दूसरे के कमांड लाइन को कमांड में बदलना है। जैसा कि दूसरों ने कहा है, xargsइस मामले में विहित सहायक उपकरण है, इसकी कमांड लाइन को पढ़ने के लिए इसकी स्टड से एक कमांड आती है, और चलाने के लिए कमांड का निर्माण होता है।
ls | xargs echo
आप प्रतिस्थापन कमांड का उपयोग करके इसे कुछ रूपांतरित भी कर सकते हैं $()
echo $(ls)
आप जो चाहते हैं वह भी करेंगे।
ये दोनों उपकरण शेल स्क्रिप्टिंग के लिए बहुत महत्वपूर्ण हैं, आपको दोनों सीखना चाहिए।
पूर्णता के लिए, जैसा कि आप प्रश्न में इंगित करते हैं, स्टड को कमांड लाइन आर्ग में बदलने का अन्य आधार तरीका शेल की बिलियन readकमांड है। यह "शब्द" ( IFSचर के रूप में परिभाषित शब्द ) को एक अस्थायी चर में परिवर्तित करता है , जिसे आप किसी भी कमांड रन में उपयोग कर सकते हैं।
ls | echoकरते हैं? बस चलाते क्यों नहींls?