চলুন দেখে নিই কিভাবে stdin , stderr , এবং stdout কাজ করে এবং আপনি সেগুলি কীভাবে ব্যবহার করতে পারেন।
stdin, stdout এবং stderr
কম্পিউটিংয়ে, স্ট্রিম শব্দটি এমন কিছু বোঝায় যা ডেটা স্থানান্তর করতে পারে। এখানে, তিনটি প্রবাহই তথ্য হিসাবে পাঠ্য বহন করে।
জলের ধারাগুলির মতো, ডেটা স্ট্রীমেরও দুটি শেষ বিন্দু রয়েছে। একটি উৎস এবং একটি বহিপ্রবাহ আছে। আপনি টার্মিনালে যে কমান্ডটি চালাচ্ছেন তা স্রোতের উভয় বিন্দুতে হবে। স্ট্রিম ব্যবহার করে, আপনি দুটি টার্মিনাল উইন্ডো, দুটি ভিন্ন কমান্ড এবং এমনকি ফাইলগুলি সংযুক্ত করতে পারেন!
আসুন বিশেষ প্রবাহগুলির একটি দ্রুত ভাঙ্গন।
- stdin: স্ট্যান্ডার্ড ইনপুটের জন্য দাঁড়ায়। এটি পাঠ্যকে ইনপুট হিসাবে নেয়।
- stdout: স্ট্যান্ডার্ড আউটপুটের জন্য দাঁড়ায়। একটি কমান্ডের টেক্সট আউটপুট stdout প্রবাহে সংরক্ষিত থাকে।
- stderr: স্ট্যান্ডার্ড ত্রুটির জন্য দাঁড়ায়। যখনই কোন কমান্ড একটি ত্রুটির সম্মুখীন হয়, ত্রুটি বার্তা এই প্রবাহে সংরক্ষিত হয়।
লিনাক্সে, প্রায় সব স্ট্রীমকেই ফাইল হিসেবে ধরা হয়। আপনি যেমন একটি ফাইল পড়তে/লিখতে পারেন, আপনি এই স্ট্রিমগুলি থেকে ডেটা পড়তে/লিখতে পারেন।
যেকোনো ফাইল অ্যাক্সেস করার একটি সহজ উপায় হল এর সাথে যুক্ত অনন্য ফাইল বর্ণনাকারী নম্বর ব্যবহার করা। এই ধারাগুলির ক্ষেত্রে, তাদের প্রত্যেকের জন্য নির্ধারিত অনন্য মান রয়েছে।
- 0: stdin
- 1: stdout
- 2: stderr
stdin, stdout, এবং stderr কর্মে
আসুন কর্মের মাধ্যমে এই ধারাগুলি সম্পর্কে আরও জানার মাধ্যমে শুরু করা যাক, আমরা stdin দিয়ে শুরু করব।
নিম্নলিখিত কমান্ডটি চালান।
$পড়ুন
কমান্ডের জন্য কিবোর্ড থেকে ইনপুট লাগবে। এখানে, পড়ার সরঞ্জামটি stdin থেকে ইনপুট পাচ্ছে। এখন আসুন stdout এর দিকে তাকাই।
প্রথমে কমান্ডটি চালান।
$ls -দ্য
এখানে, ls কমান্ড বর্তমান ডিরেক্টরিতে ফাইল (গুলি) তালিকাভুক্ত করে। তালিকা পাঠানো হয় stdout এবং টার্মিনাল এটি প্রিন্ট করে। এখন stderr চেক করা যাক।
বিভিন্ন ভাবে ত্রুটি হতে পারে। এই উদাহরণের জন্য, ls একটি অবৈধ যুক্তি পাঠানোর ফলে একটি ত্রুটি হবে।
$ls -দ্যকিছু
এখানে কোন কিছুর নাম নেই। এজন্য ls return বার্তা পাঠানো হয় stderr ।
পাইপিং
এটি একটি সাধারণ কৌশল যা stdin এবং stdout স্ট্রীমের পূর্ণ সুবিধা নেয়। আসুন এটি একটি উদাহরণ দিয়ে ব্যাখ্যা করি।
$বের করে দিল 'ওহে বিশ্ব' | খপ্পরহ্যালো
এখানে, | সাইন পাইপিংয়ের জন্য দায়ী। আউটপুট বের করে দিল জেনারেট এ লেখা আছে stdout প্রবাহ তারপর, পাইপিং grep কমান্ডের জন্য stdout এর বিষয়বস্তু stdin তে পুনirectনির্দেশিত করে। এইভাবেই grep জানে যে কন্টেন্টটি অপারেশন করতে হবে।
যদি আপনি পরবর্তী কমান্ডে stderr এবং stdout উভয় পাইপ করতে চান, তাহলে | & পরিবর্তে ব্যবহার করুন।
$বের করে দিলওহে বিশ্ব| & বিড়াল$কিছু| & বিড়াল
পুনamsনির্দেশিত স্ট্রিম
এখন আমরা জানি এই প্রবাহগুলি কীভাবে কাজ করে, আসুন এক নজরে দেখে নেওয়া যাক কিভাবে আপনি তাদের পুন redনির্দেশিত করতে পারেন। পাইপিং পুনর্নির্দেশের একটি রূপ। যাইহোক, এটি শুধুমাত্র stdin এবং stdout জড়িত। বাশ তিনটি প্রবাহের উপর নির্দিষ্ট নিয়ন্ত্রণের অনুমতি দেয়।
একটি ফাইলে stdout বিষয়বস্তু পুন redনির্দেশিত করতে, টার্গেট ফাইলের নাম অনুসারে> কোণ যোগ করুন।
$বের করে দিলওহে বিশ্ব>hello.txt
এখানে, ইকো কমান্ডের আউটপুট hello.txt ফাইলে সংরক্ষণ করা হবে।
যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে, তবে উপরের কমান্ডটি এটিকে ওভাররাইট করবে। এটি এড়াতে, নিশ্চিত করুন যে ফাইলের নামটি অনন্য। আপনি যদি ওভাররাইট করতে না চান, তাহলে আপনি এর পরিবর্তে >> ব্যবহার করতে চাইতে পারেন। এটি টার্গেট ফাইলের শেষে আউটপুট যুক্ত করে।
$বের করে দিল 'ওহে বিশ্ব' >>hello.txt
Stdin এর লক্ষ্য হল ইনপুট দিয়ে কাজ করা। এটি পুন redনির্দেশিত করা যেতে পারে। উদাহরণস্বরূপ, কীবোর্ড থেকে ইনপুট টাইপ করার পরিবর্তে, এটি একটি ফাইল থেকে লোড করা যায়।
এই কমান্ডে, cat সরাসরি hello.txt ফাইল থেকে তার ইনপুট নেবে।
$বিড়াল <hello.txt
আসুন একটি ভিন্ন উদাহরণ দিয়ে পুন redনির্দেশ পরীক্ষা করি। এই সময়, এটি একটি পাইথন স্ক্রিপ্ট জড়িত করতে যাচ্ছে।
$# pyin.py$ নাম= ইনপুট('রতn')
$ইমেইল = ইনপুট('ইমেইল প্রদান করুনn')
$ছাপা('আপনার নাম %s এবং ইমেল হল %s'%(নাম, ইমেইল))
স্ক্রিপ্টের ইনপুট hello.txt এ অবস্থিত।
$বিড়ালhello.txt
স্ক্রিপ্টের জন্য ইনপুট হিসাবে ফাইল পাঠানো যাক।
$ python3 pyin।py <হ্যালো.txt
মজার বিষয় হল, আপনি উভয়ই পুন redনির্দেশিত করতে পারেন stdin এবং stdout একই কমান্ড লাইনে। এখানে, নিচের কমান্ডটি hello.txt হিসেবে ব্যবহার করবে stdin এবং পাঠান stdout একটি ফাইলের কমান্ড।
$ python3 pyin।py <হ্যালো.txt >আউটপুটtxt
Stderr পুন Redনির্দেশ করা stdout এর অনুরূপ। যাইহোক, stderr নির্দেশ করার জন্য আপনাকে বর্ণনা ID 2 উল্লেখ করতে হবে। অন্যথায়, এটি শুধু stdout ব্যবহার করবে।
এখানে, আমি এর বিষয়বস্তু পুন redনির্দেশিত করব stderr একটি টেক্সট ফাইলে।
$কিছু2>error.txt
Stdout এবং Stderr পুন Redনির্দেশিত করা হচ্ছে
হ্যাঁ, তাদের উভয়কেই একই সাথে পুন redনির্দেশিত করা সম্ভব। পুনর্নির্দেশের পূর্বে আপনার প্রয়োজন শুধু বর্ণনা আইডি 1 এবং 2 উল্লেখ করা।
$বের করে দিলওহে বিশ্বঘ>আউটপুট লগ2>debug.log
সর্বশেষ ভাবনা
stdin , stdout , এবং stderr ডিফল্টভাবে ব্যাশ অফারগুলি চমৎকার বৈশিষ্ট্য। আপনি যদি ব্যাশ স্ক্রিপ্টিংয়ে থাকেন, সেগুলি ব্যবহার করা কঠিন পরিস্থিতিতে অবিশ্বাস্যভাবে উপকারী হতে পারে।
ব্যাশ স্ক্রিপ্টিং সম্পর্কে আরো জানতে চান? এর সাথে শুরু করা যাক ব্যাশ স্ক্রিপ্টিং এর জন্য শিক্ষানবিশ গাইড !
উপভোগ করুন!