Çünkü bu, kabuğun (bassh tarafından kopyalanan ksh) ve yalnızca kabuğun bir özelliğidir.
/dev/tcp/...gerçek dosyalar olmadığında, kabuk bir /dev/tcp/...dosyaya yeniden yönlendirme denemelerini durdurur ve bu durumda (bu dosyayı açarak socket(...);connect(...)) yerine a open("/dev/tcp/..."...)( TCP bağlantısı yapar) yapar .
Bu şekilde hecelenmesi gerektiğini unutmayın. cat < /dev/./tcp/...veya ///dev/tcp/...çalışmaz ve bunun yerine bu dosyaları açmaya çalışır (çoğu sistemde mevcut değildir ve bir hata alırsınız).
Yönlendirmenin yönü de önemli değil. Kullanmak İster 3< /dev/tcp/...ya 3> /dev/tcp/...ya 3<> /dev/tcp/...ya da 3>> /dev/tcp/...herhangi bir fark yapmaz, o TCP soketi üzerinden / gönderme veri almaya bu dosya tanımlayıcı için / den hem okuma ve yazma mümkün olacak.
Bunu yaptığınızda cat /dev/tcp/..., cataynı özel işleme uygulamadığı için işe yaramaz open("/dev/tcp/..."), her dosya için (hariç -), yalnızca kabuk (yalnızca ksh, bash) yapar ve yalnızca yeniden yönlendirme hedefi için bir şey yapar.
Bu cat -, özel olarak işlenen bir dosya yolunun başka bir örneğidir. A yapmak yerine, open("-")doğrudan 0 dosya tanımlayıcısından (stdin) okur. catve birçok metin yardımcı programı bunu yapar, kabuk yeniden yönlendirmeleri için değildir. -Dosyanın içeriğini okumak için cat ./-, veya cat < -(veya cat - < -) gerekir. Ancak /dev/stdin, olmayan sistemlerde, bashbu (sanal) dosyadan yeniden yönlendirmeler için benzer bir şey yapar. GNU awkiçin aynısını yapar /dev/stdin, /dev/stdout, /dev/stderrhatta bu dosyalar farklı davranır nerede Linux gibi sistemlerde bazı sürprizler neden olabilir bu tür dosyaları var sistemlerde.
zshTCP (ve Unix etki alanı akışı) yuva desteğine de sahiptir, ancak bu bir ztcp(ve zsocket) yerleşiklerle yapılır, bu nedenle ksh / bash yaklaşımından daha az sınırlıdır. Özellikle, ksh / bash'ın yapamayacağı bir sunucu olarak da işlev görebilir. Yine de gerçek bir programlama dilinde yapabileceklerinizden çok daha sınırlıdır.