রিদওয়ান বিন শামীম
বেশিরভাগ ইউনিক্স সিস্টেম কম্যান্ড টার্মিনাল থেকে ইনপুট গ্রহণ করে এবং টার্মিনালে আউটপুট প্রদান করে।
কম্যান্ড স্ট্যান্ডার্ড ইনপুট থেকে ইনপুট পড়ে ও স্ট্যান্ডার্ড আউটপুটে আউটপুট লিখে।
আউটপুট রিডাইরেকশন
নিচের who কম্যান্ড ইউজার ফাইলের কম্যান্ডের পুরোপুরি আউটপুটে পরিণত হবে,
$ who> users
এখানে লক্ষ্য করার মত বিষয়, টার্মিনালে কোনও আউটপুট নেই, কারণ আউটপুট স্পেসিফাইড ফাইলে চলে গেছে, সেটি ডিফল্ট স্ট্যান্ডার্ড আউটপুট ডিভাইস(এক্ষেত্রে টার্মিনাল) থেকে রিডাইরেক্ট হয়ে গেছে। যদি আমরা users ফাইল চেক করে দেখি তাহলে পরিপূর্ণ উপাদান দেখব,
$ cat users oko tty01 Sep 12 07:30 ai tty15 Sep 12 13:32 ruth tty21 Sep 12 10:10 pat tty24 Sep 12 13:07 steve tty25 Sep 12 13:03 $
রিডাইরেক্ট হওয়া ডাটা যে ফাইলে যাবে সে ফাইলে আগের কোনও ডাটা থাকলে তা মুছে যাবে, আমরা এ বিষয়টি নিচের উদাহরণে দেখতে পারি,
$ echo line1> users $ cat users line1$
পূর্বে থাকা কোনও ফাইলে আউটপুট বিস্তারনের জন্য আমরা >> অপারেটর ব্যবহার করতে পারি।
$ echo line2>> users $ cat users line1 line2 $
ইনপুট রিডাইরেকশন
আউটপুট যেমন রিডাইরেক্ট হয়ে ফাইলে আসতে পারে তেমনি ফাইল থেকে ইনপুট রিডাইরেক্ট হয়ে চলেও যেতে পারে। আউটপুট রিডাইরেকশন যেমন > ক্যারেক্টার দ্বারা প্রকাশ পায় তেমনি ইনপুট রিডাইরেকশন < ক্যারেক্টার দ্বারা প্রকাশ পায়।
যেমন, users ফাইলের লাইন নাম্বার নিচের কম্যান্ড থেকে বের করা যায়,
$ wc-l users 2 users $
এখানে আউটপুট ২ লাইনের। users ফাইলের wc কম্যান্ডের স্ট্যান্ডার্ড ইনপুটের রিডাইরেকশনের মাধ্যমে আমরা লাইন সংখ্যা জানতে পারি।
$ wc-l< users 2 $
হেয়ার ডকুমেন্ট
হেয়ার ডকুমেন্টের সাধারণ ফর্ম এরকম,
command<< delimiter document delimiter
মোট লাইনসংখ্যা জানার wc –l কম্যান্ডের ইনপুট এরকম,
$wc -l << EOF This is a simple lookup program for good (and bad) restaurants in Cape Town. EOF 3 $
স্ক্রিপ্ট ব্যবহার করে মাল্টিপল লাইন প্রিন্ট করতে here document কম্যান্ড ব্যবহার করা যায়,
#!/bin/sh cat << EOF This is a simple lookup program for good (and bad) restaurants in Cape Town. EOF
যা এরকম ফলাফল দেখাবে,
This is a simple lookup program for good (and bad) restaurants in Cape Town.
এই স্ক্রিপ্ট vi টেক্সট এডিটর দিয়ে একটি সেশন চালাবে এবং test.txt ফাইলে ইনপুট সংরক্ষণ করবে।
#!/bin/sh filename=test.txt vi $filename <<EndOfCommands i This file was created automatically from a shell script ^[ ZZ EndOfCommands
vi টেক্সট এডিটরের স্থলে vim টেক্সট এডিটর ব্যবহার করলে স্ক্রিপ্টের আউটপুট এরকম হবে,
$ sh test.sh Vim: Warning: Input is not from a terminal $
স্ক্রিপ্ট চালুর পর test.txt ফাইলে ফাইলে আমরা যা দেখব তা এরকম,
$ cat test.txt This file was created automatically from a shell script $
আউটপুট ডিসকার্ড করা
আউটপুটকে /dev/null ফাইলে রিডাইরেক্ট করে এটি করা হয়,
$ command>/dev/null
কম্যান্ডের আউটপুট ও এর এরর আউটপুট দুটিকে ডিসকার্ড করতে
$ command>/dev/null2>&1
STDIN কে STDERR তে রিডাইরেক্ট করে ম্যাসেজ প্রদর্শন করতে
$ echo message1>&2
এই কোড ব্যবহার করা যায়।
রিডাইরেকশন কম্যান্ড
এরকম কয়েকটি রিডাইরেকশন কম্যান্ড হল,
কম্যান্ড |
pgm > file |
pgm < file |
pgm >> file |
n > file |
n >> file |
n >& m |
n <& m |
<< tag |
| |
মনে রাখা দরকার, ফাইল ডেসক্রিপ্টর ০ হল নরমাল স্ট্যান্ডার্ড ইনপুট (STDIN), ১ হল স্ট্যান্ডার্ড আউটপুট (STDOUT) আর ২ হল স্ট্যান্ডার্ড এরর আউটপুট (STDERR) ।