কম্পিউটার

লিনাক্স/ব্যাশে stdin, stdout, stderr উদাহরণ সহ পুনঃনির্দেশ করুন

লিনাক্স/ব্যাশ শেলটিতে তিনটি ডেটা স্ট্রীম রয়েছে যা আপনি কমান্ড চালানোর সময় ট্যাপ করতে পারেন – stdinstdout, এবং stderr . সেগুলি কীভাবে ব্যবহার করবেন তা এখানে।

stdinstdoutstderr কনসোলে পাঠ্য প্রদর্শনের জন্য অনুমতি দেয়, এবং প্রতিটি স্ট্রীম আউটপুট করা ডেটা অন্যান্য প্রোগ্রামে নির্দেশিত হতে পারে।

এগুলোকে স্ট্যান্ডার্ড স্ট্রীম হিসেবে উল্লেখ করা হয় .

stdin কি (স্ট্যান্ডার্ড ইনপুট)?

টেক্সট ইনপুট স্ট্রীম।

অ্যাপ্লিকেশন stdin এর মাধ্যমে পাঠ্য গ্রহণ করতে পারে ইনপুট হিসাবে।

stdout কি (স্ট্যান্ডার্ড আউটপুট)?

একটি প্রোগ্রামের পাঠ্য আউটপুট স্ট্রীম।

অ্যাপ্লিকেশনগুলি stdout এর মাধ্যমে অন্যান্য প্রোগ্রামে (বা দেখার জন্য কনসোলে) ডেটা পাঠায় .

stderr (স্ট্যান্ডার্ড ত্রুটি) কি?

একটি প্রোগ্রামের পাঠ্য ত্রুটি আউটপুট স্ট্রীম।

যদি কোনো প্রোগ্রাম কোনো ত্রুটির সম্মুখীন হয়, তাহলে সেটিকে stdout এর মাধ্যমে ত্রুটি সংক্রান্ত ডেটা পাঠাতে হবে স্ট্রীম।

...হ্যাঁ, কিন্তু আসলে এর মানে কি?

একটি কম্পিউটার প্রোগ্রাম ইনপুট এবং আউটপুট ডেটা দিয়ে কাজ করে - উদাহরণস্বরূপ, একটি প্রোগ্রাম একটি গণিত সমীকরণ গ্রহণ করতে পারে এবং এটির সমাধান দিতে পারে৷

আপনার প্রোগ্রামে সমীকরণটি পেতে একটি উপায় এবং প্রোগ্রামের বাইরে উত্তর পাওয়ার একটি উপায় প্রয়োজন। আপনি সমীকরণটি অমীমাংসিত ছিল কিনা তাও জানতে চান, তাই আপনি অন্য যেকোন আউটপুট থেকে আলাদা যেকোন ত্রুটি তৈরি করতে চান৷

সেটি হল stdinstdout , এবং stderr .

যেহেতু সবকিছু একইভাবে কাজ করা জীবনকে সহজ করে তোলে, তাই এই ইনপুট, আউটপুট এবং ত্রুটি স্ট্রীমগুলি প্রমিত হয়ে গেছে যাতে কমান্ড লাইনের জন্য নির্মিত অ্যাপ্লিকেশনগুলি একইভাবে আচরণ করে৷

তাই, স্ট্যান্ডার্ড স্ট্রীম . প্রতিটি স্ট্রীমের 0-3 থেকে একটি সংখ্যাসূচক শনাক্তকারী রয়েছে:

0 stdin
1 stdout
2 stderr

stdin থেকে পুনঃনির্দেশ করা/পাইপ করা , stdoutBash/Shell-এ stderr

আপনি লিনাক্স শেলে টাইপ করছেন তা পাঠ্যের একটি স্ট্রীম – আপনি টাইপ করেন এবং পাঠ্য স্ট্রীমটি কনসোল ইনপুটে দেওয়া হয়।

একটি অ্যাপ্লিকেশন চলে, এবং এটি থেকে পাঠ্য ডেটা আউটপুট প্রদর্শনের জন্য কনসোলে দেওয়া হয় যাতে আপনি এটি পড়তে পারেন৷

কনসোলে কাজ করার সময় এটি সমস্ত ডিফল্ট আচরণ, তবে এটি পরিবর্তন করা যেতে পারে। স্ট্রিমগুলিকে পুনঃনির্দেশিত করা যেতে পারে - উদাহরণস্বরূপ, প্রোগ্রামের আউটপুট দেখার জন্য কনসোলে না হয়ে সরাসরি একটি ফাইলে স্ট্রিম করা যেতে পারে৷

একটি প্রোগ্রামের আউটপুট সরাসরি অন্য প্রোগ্রামের ইনপুটে পুনঃনির্দেশিত করা যেতে পারে।

পুনঃনির্দেশ এবং পাইপিং ব্যবহার করে এখানে কিছু মৌলিক উদাহরণ রয়েছে।

পুনঃনির্দেশ

সাধারণত, প্রতিধ্বনি কমান্ড কনসোলে পাঠ্য মুদ্রণ করবে:

echo "hello there!"

stdout ইকো প্রোগ্রামটি আপনার স্ক্রিনে প্রদর্শিত হওয়ার জন্য তার ডিফল্ট পথ গ্রহণ করছে।

পুনঃনির্দেশ আপনাকে এটি অন্য কোথাও পাঠাতে দেয়। এখানে, এটি একটি ফাইলে পাঠানো হয়:

echo "hello there!" > test.txt

text.txt নামে একটি ফাইল “hello there!” লেখাটি সহ তৈরি করা হবে (দেখুন, যদি ফাইলটি ইতিমধ্যেই বিদ্যমান থাকে তবে এটি ওভাররাইট করা হবে )।

আপনি >> ব্যবহার করে ফাইল যুক্ত করতে পারেন এর পরিবর্তে >

এর পরে, আসুন stdin রিডাইরেক্ট করি < ব্যবহার করে

cat < test.txt

বিড়াল কমান্ড text.txt-এর বিষয়বস্তু পড়ে এর stdin-এ স্ট্রীম করুন এবং তারপর বিড়াল যা করে তা করে কমান্ডটি করার জন্য ডিজাইন করা হয়েছে - এটিতে সরবরাহ করা ডেটা প্রিন্ট করে stdout , যা ডিফল্টরূপে দেখার জন্য কনসোল। সুতরাং, এটি সহজভাবে হ্যালো সেখানে! আউটপুট করবে কনসোলে।

ফাইলের ডেটা stdin-এ নির্দেশিত হয়েছিল cat কমান্ডের জন্য - এটি পুনঃনির্দেশিত হয়েছে৷

এটি এক ধরনের প্রতারণা, বিড়াল কমান্ড পাইপিং ছাড়াই প্যারামিটার হিসাবে এটিতে পাস করা ফাইলের নাম থেকে পড়ার চেষ্টা করবে, তবে এই উদাহরণের উদ্দেশ্যে এটি সবচেয়ে সহজ কমান্ড।

আপনি stdin রিডাইরেক্ট করতে পারেন এবং stdout একই আদেশে:

cat < test.txt > output.txt

stdin test.txt পড়া, রিডাইরেক্ট করা হচ্ছে বিড়াল-এ প্রোগ্রাম, এবং stdout বিড়াল থেকে প্রোগ্রামটিকে output.txt নামে একটি ফাইলে নির্দেশিত করা হচ্ছে .

আবার, এটি প্রতারণা কারণ এটি আসলেই শুধুমাত্র বিড়াল ব্যবহার করে একটি ফাইল কপি করার জন্য কমান্ড, কিন্তু এটি একটি সাধারণ উদাহরণ যা অন্য কমান্ড ব্যাখ্যা করার উপর নির্ভর করে না।

অবশেষে, আপনি stderr কে রিডাইরেক্ট করতে পারেন আমরা যে অনন্য স্ট্রিম নম্বর থেকে পড়তে চাই তা নির্দিষ্ট করে স্ট্রিম করুন (stdout হিসেবে ডিফল্ট, এটি নির্দিষ্ট করার প্রয়োজন নেই):

cat nofile.txt 2> error.txt

stdout 2 নম্বর দিয়ে চিহ্নিত করা হয় – যদি বিড়াল একটি ত্রুটি তৈরি করে, তবে এটি এই স্ট্রীমের মাধ্যমে এবং ফাইল error.txt-এ পাঠানো হবে .

উপরের উদাহরণটি error.txt নামে একটি ফাইল তৈরি করবে পাঠ্য রয়েছে:

cat: nofile.txt: No such file or directory

বিড়াল হিসেবে কমান্ড nofile.txt ফাইলটি খুঁজে পায়নি .

একযোগে পুনর্নির্দেশ

উপরের উদাহরণে, stderr স্ট্রীমকে এর সাংখ্যিক শনাক্তকারী দ্বারা চিহ্নিত করা হয়েছিল – এর মানে হল আপনি stdoutকে পুনঃনির্দেশ করতে পারেন এবং stderr আপনি কোনটিকে পুনঃনির্দেশ করতে চান তা উল্লেখ করে একই কমান্ডে:

echo "hello there! 1>test.txt 2>error.txt

উপরে, stdout test.txt,-এ পাঠানো হয় এবং stderr error.txt-এ পাঠানো হয় .

পাইপিং

পাইপিং পুনঃনির্দেশের মতই, কিন্তু এটি শুধুমাত্র stdin এর সাথে ডিল করে , এবং stdout ত্রুটিগুলি উপেক্ষা করা হয়৷

echo "hello there!" | cat

এখানে, পাইপ (| ) পাইপ (পুনঃনির্দেশ) stdout প্রতিধ্বনি-এর stdin-কে নির্দেশ করুন বিড়াল এর আদেশ।

উপসংহার

কমান্ড-লাইন অ্যাপ্লিকেশনগুলির সাথে কাজ করা প্রাথমিকভাবে অজ্ঞাত বলে মনে হতে পারে, তবে কাজগুলি স্বয়ংক্রিয় করার সময় এগুলি শক্তিশালী সরঞ্জাম। stdinstdout, এবং stderrস্ট্যান্ডার্ড স্ট্রীম এই নমনীয়তার মূল ভিত্তি - আপনি জটিল কার্যপ্রবাহ তৈরি করতে কমান্ডগুলিকে একত্রে চেইন করতে পারেন যা প্রায় যেকোনো কাজ পরিচালনা করতে পারে।


  1. ব্যবহারিক উদাহরণ সহ লিনাক্সে 10টি দরকারী চেইনিং অপারেটর

  2. লিনাক্সে ঘড়ির কমান্ড কীভাবে ব্যবহার করবেন, উদাহরণ সহ

  3. ধাঁধার এই বইটি দিয়ে ব্যাশ শিখুন

  4. 6টি ব্যবহারিক উদাহরণ সহ ব্যাশ শেল ফাংশন টিউটোরিয়াল