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

আমরা পূর্ববর্তী লেসনদুটোয় দেখেছে কীভাবে স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড এরর কোনো ফাইলে রিডিরেক্ট করতে হয়। আমরা এবার দেখবো কিভাবে স্ট্যান্ডার্ড আউটপুট ও এরর উভয়কেই একই ফাইলে রিডিরেক্ট করতে হয়। এর দুটো পদ্ধতি আছে। একটি শেলের পুরনো ভার্শনগুলোর জন্য। হয়ত আপনাকে কখনোই এটি ব্যবহার করতে হবে না। তবুও দেখে রাখা যাক। মনে করুন `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** একটি বিশেষ ফাইল যা ইনপুট নেয় কিন্তু তা নিয়ে কিছুই করে না। এই ফিচারটিকে বিটবাকেট বলা হয়।
