প্রথমে নোট করুন ফাইলটি ডেস্ক্রিপ্টর লেখার জন্য বা পড়ার জন্য পড়ছে কিনা তার উপর নির্ভর করে বন্ধ করার সিনট্যাক্সটি হয় 5>&-
বা 6<&-
। ব্লগ পোস্টটিতে একটি টাইপো বা ফর্ম্যাটিং ভুল আছে বলে মনে হচ্ছে।
এখানে মন্তব্য স্ক্রিপ্ট।
exec 5>/tmp/foo # open /tmp/foo for writing, on fd 5
exec 6</tmp/bar # open /tmp/bar for reading, on fd 6
cat <&6 | # call cat, with its standard input connected to
# what is currently fd 6, i.e., /tmp/bar
while read a; do #
echo $a >&5 # write to fd 5, i.e., /tmp/foo
done #
এখানে কোন বন্ধ নেই। সমস্ত সাধারণ ইনপুট এবং আউটপুটগুলি এই সাধারণ উদাহরণে একই জায়গায় চলেছে বলে অতিরিক্ত ফাইল বর্ণনাকারীর ব্যবহারের প্রয়োজন নেই। আপনি লিখতে পারে
cat </tmp/bar |
while read a; do
echo $a
done >/tmp/foo
যখন আপনি একসাথে একাধিক ফাইলে লিখতে চান সুনির্দিষ্ট ফাইল বর্ণনাকারী ব্যবহার দরকারী হয়। উদাহরণস্বরূপ, এমন একটি স্ক্রিপ্ট বিবেচনা করুন যা ডেটা আউটপুট ফাইলের ডেটা এবং একটি লগ ফাইলে লগিং ডেটা এবং সম্ভবত ত্রুটি বার্তাগুলিতেও আউটপুট করে। এর অর্থ তিনটি আউটপুট চ্যানেল: একটি ডেটার জন্য, একটি লগের জন্য এবং একটি ত্রুটির জন্য। যেহেতু আউটপুট জন্য মাত্র দুটি স্ট্যান্ডার্ড বর্ণনাকারী রয়েছে, তৃতীয়টি প্রয়োজন। exec
আউটপুট ফাইলগুলি খোলার জন্য আপনি কল করতে পারেন :
exec >data-file
exec 3>log-file
echo "first line of data"
echo "this is a log line" >&3
…
if something_bad_happens; then echo error message >&2; fi
exec >&- # close the data output file
echo "output file closed" >&3
দক্ষতা সম্পর্কে মন্তব্যটি তখন আসে যখন আপনার কোনও লুপে পুনর্নির্দেশ হবে, (যেমন ধরুন ফাইলটি শুরুর জন্য খালি রয়েছে):
while …; do echo $a >>/tmp/bar; done
প্রতিটি পুনরাবৃত্তিতে, প্রোগ্রামটি খোলে /tmp/bar
, ফাইলটির শেষের দিকে সন্ধান করে, কিছু ডেটা যুক্ত করে এবং ফাইলটি বন্ধ করে দেয়। একবার এবং সকলের জন্য ফাইলটি খোলার পক্ষে এটি আরও দক্ষ:
while …; do echo $a; done >/tmp/bar
যখন বিভিন্ন সময়ে একাধিক পুনঃনির্দেশগুলি ঘটে থাকে, তখন কোনও পুনর্নির্দেশে exec
কোনও ব্লক মোড়কের পরিবর্তে পুনর্নির্দেশগুলি সম্পাদন করার জন্য কল করা দরকারী হয়ে ওঠে।
exec >/tmp/bar
while …; do echo $a; done
আপনি এই সাইটে ট্যাগ ব্রাউজ করে পুনঃনির্দেশের আরওio-redirection
কয়েকটি উদাহরণ পাবেন ।