স্ট্যান্ডার্ড আউটপুট ও এরর একত্রে রিডিরেকশন

Last updated 4 months ago

আমরা পূর্ববর্তী লেসনদুটোয় দেখেছে কীভাবে স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড এরর কোনো ফাইলে রিডিরেক্ট করতে হয়। আমরা এবার দেখবো কিভাবে স্ট্যান্ডার্ড আউটপুট ও এরর উভয়কেই একই ফাইলে রিডিরেক্ট করতে হয়। এর দুটো পদ্ধতি আছে। একটি শেলের পুরনো ভার্শনগুলোর জন্য। হয়ত আপনাকে কখনোই এটি ব্যবহার করতে হবে না। তবুও দেখে রাখা যাক। মনে করুন ls -l /bin/usr(যদিও /bin/usr/ বলে কোনো ডিরেক্টরি নেই।) কমান্ডটির আউটপুট ও এরর ls-output.txt ফাইলে রিডিরেক্ট করবো। সেক্ষেত্রে আমাদের লিখতে হবে:

me@howtocode-pc:~$ ls -l /bin/usr > ls-output.txt 2>&1

ls -l /bin/usr > ls-output.txt এই অংশটুকু দিয়ে আমরা কমান্ডটির আউটপুট ls-output.txt ফাইলে রিডিরেক্ট করেছি এবং তারপর 2>&1 দিয়ে আমরা নির্দেশ দিয়েছি ফাইল ডেস্ক্রিপ্টর ২ কে ফাইল ডেস্ক্রিপ্টর ১ এ রিডিরেক্ট করতে অর্থাৎ স্ট্যান্ডার্ড এররকেই আমরা স্ট্যান্ডার্ড আউটপুটে রিডিরেক্ট করেছি এবং স্ট্যান্ডার্ড আউটপুট যেহেতু ls-output.txt ফাইলে রিডিরেক্ট করা তাই এররগুলোও ওখানেই জমা হবে।

আধুনিক শেল আমাদের আর‌ ভালো একটা উপায় দেয় উভয়কে একই ফাইলে রিডিরেক্ট করতে:

me@howtocode-pc:~$ ls -l /bin/usr &> ls-output.txt

অর্থাৎ, রিডিরেকশনের চিহ্ন হিসেবে &> ব্যবহার করলেই হবে। আমরা আগে থেকেই থাকা কোনো ফাইলে আরো এরকম রিডিরেক্ট করতে পারি &>> চিহ্ন দিয়ে।

টিপস: কখনো কখনো আপনার মনে হতেই পারে এত আউটপুট বা এরর কিছুই আপনি দেখতে চান না। আপনি তখন সমস্তকিছু /dev/null এ রিডিরেক্ট করে দিতে পারেন। তখন সেগুলো না স্ক্রীনে জমা হবে না সেভ হবে কোনো ফাইলে। এটা করতে পারেন এভাবে:

me@howtocode-pc:~$ ls -l /bin/usr/ &> /dev/null

/dev/null একটি বিশেষ ফাইল যা ইনপুট নেয় কিন্তু তা নিয়ে কিছুই করে না। এই ফিচারটিকে বিটবাকেট বলা হয়।