इस परिदृश्य पर विचार करें:फीफो रोकें बंद कर दिया फीफो
एक फीफो नामित test
बनाई गई है। एक टर्मिनल विंडो में (ए) मैं cat <test
चलाता हूं और दूसरे में (बी) cat >test
चलाता हूं। अब विंडो बी में लिखना और विंडो ए में आउटपुट प्राप्त करना संभव है। प्रक्रिया ए को समाप्त करना और इसे फिर से लॉन्च करना भी संभव है और फिर भी इस सेटअप को संदिग्ध के रूप में उपयोग करने में सक्षम हो सकता है। हालांकि यदि आप विंडो बी में प्रक्रिया को समाप्त करते हैं, बी (जहां तक मुझे पता है) एफआईएफओ के माध्यम से ए को संसाधित करने के लिए एक ईओएफ भेजता है और उसे भी समाप्त कर देता है।
वास्तव में, यदि आप ऐसी प्रक्रिया चलाते हैं जो ईओएफ पर समाप्त नहीं होता है, तो भी आप प्रक्रिया में रीडायरेक्ट किए गए अपने फीफो का उपयोग करने में सक्षम नहीं होंगे। जो मुझे लगता है क्योंकि यह फीफो बंद माना जाता है।
क्या इस समस्या के आसपास काम करने के लिए वैसे भी है?
इस समस्या में भाग लेने का कारण यह है क्योंकि मैं स्क्रीन सत्र में चल रहे अपने Minecraft सर्वर पर आदेश भेजना चाहता हूं। उदाहरण के लिए: echo "command" >FIFO_to_server
। स्क्रीन द्वारा स्वयं का उपयोग करके यह संभवतः संभव है लेकिन मैं स्क्रीन के साथ बहुत सहज नहीं हूं, मुझे लगता है कि केवल पाइप का उपयोग करने वाला समाधान एक सरल और क्लीनर होगा।
दुर्भाग्यवश 'पूंछ' ईओएफ के लिए इंतजार कर रहा है, इसलिए यह लाइन द्वारा पाइप लाइन से सामग्री को पास नहीं करेगा। – pabouk
@pabouk इस बग को इंगित करने के लिए धन्यवाद: 'tail -n 1 -f' इनपुट को छोड़ देगा जो इसे शुरू करने से पहले उपलब्ध था या इसे पढ़ने से तेज़ी से उपलब्ध कराया गया था।मेरा मतलब था 'tail -n +1 -f', जो सीधे आउटपुट करना शुरू करता है। – Gilles
धन्यवाद। मैंने पहले यह कोशिश की है लेकिन '-n + 1' ने काम नहीं किया जैसा कि मैंने उम्मीद की थी। अब जब आपने पुष्टि की है कि यह सही तरीका है कि मैंने समस्या की जांच की और महसूस किया कि समस्या 'पूंछ' के stdout के ब्लॉक बफरिंग (डिफ़ॉल्ट लाइन बफरिंग के बजाय) में है। लाइन पाइपिंग द्वारा लाइन के लिए समाधान: 'stdbuf -oL tail -n +1 -f client_pipe | कमांड ' – pabouk