मैं इस विशेष उदाहरण के संदर्भ में नामित पाइप को समझने की कोशिश कर रहा हूं।
मैं <(ls -l)
अपने टर्मिनल में टाइप करता हूं और आउटपुट प्राप्त करता हूं bash: /dev/fd/63: Permission denied
।
यदि मैं टाइप करता हूं cat <(ls -l)
, तो मैं निर्देशिका सामग्री देख सकता हूं। यदि मैं इसके cat
साथ प्रतिस्थापित करता echo
हूं, तो मुझे लगता है कि मुझे टर्मिनल नाम (या यह है?) मिलता है।
echo <(ls -l)
के रूप में उत्पादन देता है /dev/fd/63
।
इसके अलावा, यह उदाहरण आउटपुट मेरे लिए अस्पष्ट है।
ls -l <(echo "Whatever")
lr-x------ 1 root root 64 Sep 17 13:18 /dev/fd/63 -> pipe:[48078752]
हालाँकि, अगर मैं देता हूँ, ls -l <()
यह मुझे निर्देशिका सामग्री सूचीबद्ध करता है।
नामित पाइप के मामले में क्या हो रहा है?
mkfifo
केवल नामांकित पाइप बनाता है, बिना किसी सामग्री के। इसलिए आपको इसे स्वयं लिखने की आवश्यकता है (उदाहरण के लिएmkfifo mypipe; ls > mypipe
)। और हाँ, पाइप को लिखता है जब तक कुछ प्रक्रिया पाइप से नहीं पढ़ता है तब तक ब्लॉक हो जाएगा।