Karena itu fitur shell (dari ksh, disalin oleh bash), dan shell saja.
/dev/tcp/...
bukan file nyata, shell mencegat upaya untuk mengarahkan ulang ke /dev/tcp/...
file dan kemudian melakukan socket(...);connect(...)
(membuat koneksi TCP) alih-alih open("/dev/tcp/..."...)
(membuka file itu) dalam kasus itu.
Perhatikan bahwa itu harus dieja seperti itu. cat < /dev/./tcp/...
atau ///dev/tcp/...
tidak akan berfungsi, dan akan mencoba membuka file-file itu (yang pada kebanyakan sistem tidak ada dan Anda akan mendapatkan kesalahan).
Arah pengalihan juga tidak masalah. Apakah Anda menggunakan 3< /dev/tcp/...
atau 3> /dev/tcp/...
atau 3<> /dev/tcp/...
bahkan 3>> /dev/tcp/...
tidak akan membuat perbedaan, Anda akan dapat membaca dan menulis dari / ke deskriptor file itu untuk menerima / mengirim data melalui soket TCP tersebut.
Ketika Anda melakukannya cat /dev/tcp/...
, itu tidak berhasil karena cat
tidak menerapkan penanganan khusus yang sama, itu memang open("/dev/tcp/...")
seperti untuk setiap file (kecuali-
), hanya shell (ksh, bash saja) yang melakukannya, dan hanya untuk target pengalihan.
Itu cat -
adalah contoh lain dari jalur file yang ditangani secara khusus. Alih-alih melakukan open("-")
, itu membaca langsung dari file descriptor 0 (stdin). cat
dan banyak utilitas teks melakukan itu, shell tidak untuk pengalihannya. Untuk membaca konten -
file, Anda perlu cat ./-
, atau cat < -
(atau cat - < -
). Pada sistem yang tidak memiliki /dev/stdin
, bash
akan melakukan sesuatu yang serupa untuk pengalihan dari file (virtual) itu. GNU awk
melakukan hal yang sama untuk /dev/stdin
, /dev/stdout
, /dev/stderr
bahkan pada sistem yang memiliki file tersebut yang dapat menyebabkan beberapa kejutan pada sistem seperti Linux di mana file-file berperilaku berbeda.
zsh
juga memiliki dukungan soket TCP (dan Unix domain stream), tapi itu dilakukan dengan ztcp
(dan zsocket
) builtins, jadi itu kurang terbatas daripada pendekatan ksh / bash. Secara khusus, ini juga dapat bertindak sebagai server yang tidak dapat dilakukan ksh / bash. Ini masih jauh lebih terbatas daripada apa yang dapat Anda lakukan dalam bahasa pemrograman nyata sekalipun.