หากต้องการอ่านจาก file descriptor 6 ฉันสามารถใช้<&6
หรือ</dev/fd/6
(aka /proc/self/fd/6
) โดยปกติแล้วทั้งสองทำงานได้ดีเท่า ๆ กัน อย่างไรก็ตามหากไฟล์ descriptor นั้นเป็นซ็อกเก็ตสิ่งแปลก ๆ ก็เกิดขึ้น ตัวอย่างเช่น:
$ 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
ที่นี่ls
แสดงให้เห็นถึง descriptor มีอยู่จริง แต่การเข้าถึงข้อมูลเป็นไปไม่ได้ด้วยวิธีนี้ ถ้าฉันใช้cat <&6
แทนทุกอย่างทำงานได้ดีอีกครั้ง
อะไรคือความแตกต่างระหว่างทั้งสองวิธีในการเข้าถึงไฟล์ descriptor?
มีวิธีที่ดีในการเข้าถึง descriptor ถ้าจำนวนถ้ากำหนดในตัวแปรหรือไม่? (ใช้</dev/fd/$fd
งานได้ แต่ใช้<&$fd
ไม่ได้)
(สถานการณ์ดังกล่าวสามารถสังเกตได้บน linux แต่ไม่ใช่ใน OpenBSD - ดูเหมือนว่าตัวอธิบายไฟล์นั้นเป็นอุปกรณ์ตัวอักษรปกติที่นั่น)