Per leggere dal descrittore di file 6 posso usare <&6
o </dev/fd/6
(aka /proc/self/fd/6
). Di solito entrambi funzionano ugualmente bene. Tuttavia, se quel descrittore di file risulta essere un socket, accadono cose strane. Per esempio:
$ 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
Qui ls
mostra che il descrittore è effettivamente presente. Ma l'accesso ai dati non è possibile in questo modo. Se uso cat <&6
invece tutto funziona di nuovo bene.
Qual è la differenza tra entrambi i modi di accedere al descrittore di file?
C'è un buon modo per accedere a un descrittore se il numero è indicato in una variabile? ( </dev/fd/$fd
funzionerebbe, ma <&$fd
non lo fa.)
(La situazione di cui sopra può essere osservata su Linux, ma non su OpenBSD. - Sembra che quel descrittore di file sia un dispositivo a caratteri regolari lì.)