क्योंकि यह शेल की एक विशेषता है (ksh की, बैश द्वारा कॉपी की गई), और शेल केवल।
/dev/tcp/...
वास्तविक फाइलें नहीं हैं, शेल किसी /dev/tcp/...
फ़ाइल में रीडायरेक्ट करने का प्रयास करता है और फिर उस मामले में (उस फ़ाइल को खोलने socket(...);connect(...)
) के बजाय एक open("/dev/tcp/..."...)
( टीसीपी कनेक्शन बनाता है ) करता है।
ध्यान दें कि इसे उसी तरह वर्तनी देना है। cat < /dev/./tcp/...
या ///dev/tcp/...
काम नहीं करेगा, और इसके बजाय उन फ़ाइलों को खोलने का प्रयास करेगा (जो अधिकांश प्रणालियों में मौजूद नहीं हैं और आपको एक त्रुटि मिलेगी)।
पुनर्निर्देशन की दिशा भी मायने नहीं रखती। आप का उपयोग करें 3< /dev/tcp/...
या 3> /dev/tcp/...
या 3<> /dev/tcp/...
या यहाँ तक कि 3>> /dev/tcp/...
कोई फर्क नहीं होगा, तो आप उस TCP सॉकेट से अधिक / भेजने डेटा प्राप्त करने के उस फ़ाइल वर्णनकर्ता करने के लिए दोनों पढ़ने और / से लिखने के लिए कर सकेंगे।
जब आप ऐसा करते हैं cat /dev/tcp/...
, तो यह काम नहीं करता है क्योंकि cat
यह उसी विशेष हैंडलिंग को लागू नहीं करता है, यह open("/dev/tcp/...")
हर फ़ाइल (छोड़कर -
), केवल शेल (ksh, bash केवल) करता है, और केवल पुनर्निर्देशन के लक्ष्य के लिए पसंद करता है।
यह cat -
विशेष रूप से संभाले गए फ़ाइल पथ का एक और उदाहरण है। ए करने के बजाय open("-")
, यह सीधे फाइल डिस्क्रिप्टर 0 (स्टडिन) से पढ़ता है। cat
और कई पाठ उपयोगिताएँ ऐसा करती हैं, शेल अपने पुनर्निर्देशन के लिए नहीं है। -
फ़ाइल की सामग्री को पढ़ने के लिए , आपको आवश्यकता है cat ./-
, या cat < -
(या cat - < -
)। सिस्टम में जो नहीं है /dev/stdin
, bash
वह हालांकि उस (आभासी) फ़ाइल से पुनर्निर्देशन के लिए कुछ समान करेगा। जीएनयू awk
के लिए एक ही करता है /dev/stdin
, /dev/stdout
, /dev/stderr
यहां तक कि प्रणाली है कि इस तरह की फ़ाइलों जो लिनक्स की तरह सिस्टम पर कुछ आश्चर्य पैदा कर सकता है, जहां उन फ़ाइलों को अलग ढंग से व्यवहार किया है पर।
zsh
इसमें TCP (और Unix डोमेन स्ट्रीम) सॉकेट सपोर्ट भी है, लेकिन यह एक ztcp
(और zsocket
) बिल्डिंस के साथ किया गया है , इसलिए यह ksh / bash दृष्टिकोण से कम सीमित है। विशेष रूप से, यह एक सर्वर के रूप में भी कार्य कर सकता है जो ksh / bash नहीं कर सकता है। यद्यपि आप वास्तविक प्रोग्रामिंग भाषा में क्या कर सकते हैं, यह उससे कहीं अधिक सीमित है।