ফাইল বর্ণনাকারী থেকে 6 পড়তে আমি ব্যবহার করতে পারি <&6
বা </dev/fd/6
(ওরফে /proc/self/fd/6
)। সাধারণত উভয়ই সমানভাবে ভাল কাজ করে। তবে যদি সেই ফাইল বর্ণনাকারীটিকে সকেট হিসাবে দেখা দেয় তবে অদ্ভুত জিনিস ঘটে। উদাহরণ স্বরূপ:
$ 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
বর্ণনাকারী প্রকৃতপক্ষে উপস্থিত দেখায়। তবে ডেটা অ্যাক্সেস করা এইভাবে সম্ভব নয়। আমি যদি cat <&6
পরিবর্তে ব্যবহার করি তবে সবকিছু আবার ভালভাবে কাজ করে।
ফাইল বর্ণনাকারী অ্যাক্সেস করার উভয় পদ্ধতির মধ্যে পার্থক্য কী?
কোনও ভেরিয়েবলটিতে যদি নম্বর দেওয়া হয় তবে কি কোনও বিবরণকারীকে অ্যাক্সেস করার ভাল উপায় আছে? ( </dev/fd/$fd
কাজ করবে, কিন্তু কাজ <&$fd
করে না))
(উপরের পরিস্থিতি লিনাক্সে লক্ষ্য করা যায় তবে ওপেনবিএসডি-তে নয় - ফাইল বর্ণনাকারী মনে হয় সেখানে নিয়মিত চরিত্রের ডিভাইস রয়েছে।)