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

আমরা আগের লেসনে জেনেছি স্ট্যান্ডার্ড আউটপুটকে 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

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

Last updated