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

Last updated 6 months ago

আমরা আগের লেসনে জেনেছি স্ট্যান্ডার্ড আউটপুটকে stdout নামে একটি ফাইলে পাঠানো হয়। আমরা টার্মিনালে যা দেখি তা সেখান থেকেই আসে। এখন আমরা যদি সেটা stdout না পাঠিয়ে অন্য কোনো ফাইল বা প্রোগ্রামে পাঠাতে চাই সেটা সম্ভব। প্রথমে আমরা সাধারন একটা কমান্ডে কি হয় দেখি:

me@howtocode-pc:~$ ls -l /usr/bin/
total 282068
-rwxr-xr-x 1 root root 39552 Mar 24 13:35 [
lrwxrwxrwx 1 root root 8 Jul 9 03:51 2to3 -> 2to3-2.7
-rwxr-xr-x 1 root root 96 Mar 23 05:55 2to3-2.7
-rwxr-xr-x 1 root root 96 Apr 11 20:14 2to3-3.4
-rwxr-xr-x 1 root root 10320 Feb 7 2013 411toppm
-rwxr-xr-x 1 root root 39 Feb 18 2012 7z
-rwxr-xr-x 1 root root 40 Feb 18 2012 7za
-rwxr-xr-x 1 root root 106296 Mar 28 00:52 a2p
lrwxrwxrwx 1 root root 25 Aug 21 14:15 aclocal -> /etc/alternatives/aclocal
-rwxr-xr-x 1 root root 36792 Jan 3 2014 aclocal-1.14
-rwxr-xr-x 1 root root 19008 Jan 17 2014 aconnect
-rwxr-xr-x 1 root root 15008 Apr 4 00:41 acpi_listen
-rwxr-xr-x 1 root root 6123 Apr 30 22:59 add-apt-repository
-rwxr-xr-x 1 root root 6280 Jun 4 02:54 addpart
-rwxr-xr-x 1 root root 27696 Apr 16 01:00 addr2line
-rwxr-xr-x 1 root root 73184 Jan 17 2014 alsaloop
-rwxr-xr-x 1 root root 65456 Jan 17 2014 alsamixer
-rwxr-xr-x 1 root root 15072 Jan 17 2014 alsaucm
-rwxr-xr-x 1 root root 19008 Jan 17 2014 amidi
-rwxr-xr-x 1 root root 52664 Jan 17 2014 amixer
.....

আপনি দীর্ঘ একটি লিস্ট দেখবেন এর /usr/bin/ এর কন্টেন্ট এর। অনেক সময় লাগবে টার্মিনালে স্ক্রল করে করে দেখতে। জায়গাও নষ্ট হবে প্রচুর। আমরা যা করতে পারি তা হলো এই আউটপুট একটা ফাইলে সংরক্ষণ বা সেভ করে রাখা। পরে সেটা দেখতে পারি less কমান্ড দিয়ে অনেক কম ঝামেলাবিহীন উপায়ে। তারমানে, আমরা এই আউটপুট বা স্ট্যান্ডার্ড আউটপুট যা স্ক্রীনে আসছে তাকে একটা ফাইলে রিডিরেক্ট করে দেবো। কিন্তু কিভাবে?

রিডিরেক্ট এর জন্য কমান্ড নেই কোনো বরং একটি শেল ফিচার আছে যার মাধ্যমে '>' চিহ্নের মাধ্যমে আমরা সহজেই আউটপুট রিডিরেক্ট করতে পারি। আমরা যদি উপরের এই কমান্ডটির আউটপুট ls-output.txt নামের একটি ফাইলে রিডিরেক্ট করতে চাই তো লিখতে হবে:

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

কমান্ডটি দেয়ার পর আপনি স্ক্রীনে কিছুই দেখবেন না, কোনো দীর্ঘ লিস্টই নেই। বরং আপনার ওয়ার্কিং ডিরেক্টরিতে ls-output.txt নামে একটি ফাইল পাবেন।

me@howtocode-pc:~$ ls -l ls-output.txt
-rw-rw-r-- 1 me me 140433 Sep 5 20:42 ls-output.txt

দেখুন, ১৪০ কিলোবাইটের দীর্ঘ টেক্সট ফাইল। আপনি less ls-output.txt কমান্ডের মাধ্যমে দেখতে পারবেন ফাইলে কি কি লেখা আছে।

আমরা যদি ls-output.txt ফাইলে আরো কিছু আউটপুট একইভাবে রিডিরেক্ট করতে চাই সেক্ষেত্রে একটা ঘটনা ঘটবে। তা হচ্ছে আগের তথ্য সব মুছে যাবে। কিন্তু আমরা যদি তা না চাই, যদি চাই যে আগের তথ্যও থাকুক এবং তারসাথে নতুন তথ্য যোগ হোক তাহলে '>'' এর পরিবর্তে '>>' ব্যবহার করতে হবে।

me@howtocode-pc:~$ ls -l ls-output.txt
-rw-rw-r-- 1 me me 280866 Sep 6 15:42 ls-output.txt

দেখুন, আমরা আগের কমান্ডটিই দিয়েছি কিন্তু এবার '>>' দিয়ে। ফলে আগের তথ্যের সাথে নতুন রিডিরেক্ট করা তথ্য মিলে দ্বিগুন তথ্য এসেছে।