दो विंडो, एक ही यूजर, बैश प्रॉम्प्ट के साथ। विंडो -1 प्रकार में:
$ mkfifo f; exec <f
तो बैश अब फाइल डिस्क्रिप्टर 0 से पढ़ने का प्रयास कर रहा है, जिसे नामांकित पाइप में मैप किया गया है f
। विंडो -2 प्रकार में:
$ echo ls > f
अब विंडो -1 एक एलएस प्रिंट करता है और फिर शेल मर जाता है। क्यों?
अगला प्रयोग: खुली हुई खिड़की -1 के साथ फिर से exec <f
। विंडो -2 प्रकार में:
$ exec 3>f
$ echo ls >&3
ऊपर की पहली पंक्ति के बाद, विंडो -1 जागता है और एक शीघ्र प्रिंट करता है। क्यों? ऊपर दूसरी पंक्ति के बाद, विंडो -1 ls
आउटपुट को प्रिंट करता है और शेल जीवित रहता है। क्यों? वास्तव में, अब विंडो -2 में, echo ls > f
विंडो -1 शेल को बंद नहीं करता है।
जवाब के लिए फ़ाइल -2 के विवरण के अस्तित्व के साथ करना होगा खिड़की -2 से नामित पाइप का संदर्भ देते हुए ?!
exec 3>f
चलाए जाने के बाद, पहला शेल फिर एक संकेत देता है। (माइनर बिंदु, आप "में मतलब था लिखने अपनी टिप्पणी में मोड"?)
exec <f
,bash
करने का प्रयास नहीं कर रहा है पढ़ा सेf
, यह पहली करने के लिए प्रयास कर रहा है खोलने यह।open()
कुछ पाइप को राइट मोड में एक और खुला (जिसके आधार पर पाइप instantiated किया जाएगा, और खोल यह से इनपुट पढ़ा जाएगा) कर रही प्रक्रिया नहीं होने तक, नहीं लौटेगा।