मान लें कि मेरे पास निम्नलिखित पाइप है:
a | b | c | d
मैं कैसे पूरा करने के लिए इंतजार कर सकते हैं c(या b) में shया bash? इसका मतलब है कि स्क्रिप्ट dकिसी भी समय शुरू हो सकती है (और इसके लिए प्रतीक्षा करने की आवश्यकता नहीं है) लेकिन cसही तरीके से काम करने के लिए पूर्ण आउटपुट की आवश्यकता होती है।
उपयोग के मामले में है difftoolके लिए gitहै कि छवियों तुलना करती है। इसे gitइसके इनपुट ( a | b | cभाग) को संसाधित करने और तुलना ( dभाग) के परिणामों को प्रदर्शित करने की आवश्यकता है । फोन करने वाले इनपुट कि के लिए आवश्यक है को नष्ट करेगा aऔर b। इसका मतलब यह है कि स्क्रिप्ट से लौटने से पहले, प्रक्रिया c(या b) को समाप्त करना होगा। दूसरी ओर, मैं इंतजार नहीं कर सकता dक्योंकि इसका मतलब है कि मैं उपयोगकर्ता इनपुट की प्रतीक्षा कर रहा हूं।
मुझे पता है कि मैं cएक अस्थायी फ़ाइल के परिणाम लिख सकता हूं , या शायद एक फीफो का उपयोग कर सकता हूं bash। (निश्चित नहीं कि अगर फीफो मदद करेगा, हालांकि।) क्या यह संभव है बिना अस्थायी फाइलों के इसे हासिल करना sh?
संपादित करें
शायद यह पर्याप्त होगा अगर मैं एक विश्वसनीय फैशन में प्रक्रिया c(या b) की प्रक्रिया आईडी का पता लगा सकता हूं । तब पूरे पाइप को एसिंक्रोनस रूप से शुरू किया जा सकता था, और मैं एक प्रक्रिया आईडी की प्रतीक्षा कर सकता था। की तर्ज पर कुछ
wait $(a | b | { c & [print PID of c] ; } | d)
संपादित करें ^ 2
मुझे एक समाधान मिला है, टिप्पणियाँ (या अभी भी बेहतर समाधान) का स्वागत है।
dजब भी यह पसंद करने के लिए शुरू करने के लिए स्वतंत्र है, लेकिन cइससे पहले कि मैं आगे बढ़ सकता हूं समाप्त करने की आवश्यकता है।
dयह पसंद होने पर शुरू हो सकता है, तो वास्तव में आप किसका इंतजार कर रहे हैं?
dआउटपुट का उपयोग नहीं करता है, cतो dपाइपलाइन का हिस्सा बनाने के लिए कोई मतलब नहीं है । लेकिन यदि आप dइनपुट का उपयोग करते हैं तो dअपने इनपुट पर कुछ समय के लिए काम करना चाहिए, इसके बाद आपके दृष्टिकोण के लिए यह सब पढ़कर कोई फर्क नहीं पड़ता है।
dप्रोसेसिंग शुरू करना चाहते हैं ? जैसा कि यह आता है आप प्रत्येक आउटपुट लाइन को संसाधित करना शुरू नहीं करना चाहते हैं ?ccd