यदि आप किसी अन्य के इनपुट में एक कार्यक्रम का उत्पादन रीडायरेक्ट करने के लिए चाहते हैं, बस एक साधारण पाइप लाइन का उपयोग करें:
program1 arg arg | program2 arg arg
आप एक फ़ाइल और पाइप इसे में program1
के उत्पादन में सहेजना चाहते हैं program2
में, आप tee(1)
उपयोग कर सकते हैं:
program1 arg arg | tee output-file | program2 arg arg
एक पाइप लाइन में सभी कार्यक्रमों को एक साथ चलाए जा रहे हैं। अधिकांश कार्यक्रम आमतौर पर I/O अवरुद्ध करते हैं: यदि वे अपने इनपुट को पढ़ने का प्रयास करते हैं और कुछ भी नहीं है, तो वे ब्लॉक: यानी, वे रुकते हैं, और ऑपरेटिंग सिस्टम उन्हें तब तक चलाने के लिए शेड्यूल करता है जब तक कि अधिक इनपुट उपलब्ध न हो जाए (सीपीयू खाने से बचने के लिए)। इसी प्रकार, यदि पाइपलाइन में पहले एक प्रोग्राम बाद में प्रोग्राम लिखने से पहले तेज़ी से लिख रहा है, तो अंततः पाइप का बफर भर जाता है और लेखक ब्लॉक करता है: ओएस इसे तब तक शेड्यूल करता है जब तक कि पाइप के बफर को पाठक द्वारा खाली नहीं किया जाता है, और फिर यह फिर से लिखना जारी रख सकता है।
संपादित
आप program1
कमांड लाइन पैरामीटर के रूप में के उत्पादन में उपयोग करना चाहते हैं, तो आप backquotes या $()
सिंटैक्स का उपयोग कर सकते हैं:
# Runs "program1 arg", and uses the output as the command-line arguments for
# program2
program2 `program1 arg`
# Same as above
program2 $(program1 arg)
$()
वाक्य रचना पसंद किया जाना चाहिए, क्योंकि वे स्पष्ट हैं, और वे घोंसला जा सकते हैं।
स्रोत
2009-07-02 02:28:03
आपने नीचे प्रोग्राम 1 के लिए एक सीएलआई इंटरफ़ेस का उल्लेख किया है - यदि प्रोग्राम 1 इंटरैक्टिव इनपुट पर निर्भर करता है, तो यह एडम के उत्तर शो जैसे प्रत्यक्ष पाइपिंग के लिए एक गरीब उम्मीदवार होने की संभावना है। –
विंडोज़ में पिपिंग लिनक्स से अलग है ... मेरा मानना है कि लिनक्स कुछ प्रकार के रिंग-बफर का उपयोग करता है और अच्छी तरह से प्रदर्शन करने के लिए समवर्ती प्रोग्रामिंग सिद्धांत (निर्माता-उपभोक्ता समस्या इत्यादि) का उपयोग करता है। मुझे लगता है कि विंडोज़ तब तक इंतजार कर रहा है जब तक कि दूसरा प्रोग्राम कॉल करने से पहले किया जाता है। –