Dosya tanımlayıcı 6'dan okumak için <&6
veya </dev/fd/6
(aka /proc/self/fd/6
) kullanabilirsiniz. Genellikle her ikisi de eşit derecede iyi çalışır. Ancak, bu dosya tanımlayıcı bir soket olursa, garip şeyler olur. Örneğin:
$ bash -c 'ls -l /dev/fd/6;cat /dev/fd/6' 6</dev/tcp/localhost/12345
lrwx------ 1 michas michas 64 Jan 10 19:50 /dev/fd/6 -> socket:[315010]
cat: /dev/fd/6: No such device or address
Burada ls
tanımlayıcının gerçekten mevcut olduğunu gösterir. Ancak verilere bu şekilde erişmek mümkün değildir. Onun cat <&6
yerine kullanırsam her şey tekrar iyi çalışır.
Dosya tanımlayıcıya erişmenin her iki yolu arasındaki fark nedir?
Bir değişkente verilirse tanımlayıcıya erişmenin iyi bir yolu var mı? ( </dev/fd/$fd
işe yarar, ancak işe <&$fd
yaramaz.)
(Yukarıdaki durum linux'da görülebilir, ancak OpenBSD'de görülemez. - Dosya tanımlayıcı orada normal bir karakter aygıtı gibi görünüyor.)