STDOUT এবং STDIN কে সংযুক্ত করার অর্থ কী?


10

আমি একটি বই পড়ছি, এতে বলা হয়েছে:

প্রতিটি প্রক্রিয়াটিতে এটির জন্য কমপক্ষে তিনটি যোগাযোগের চ্যানেল উপলব্ধ রয়েছে: "স্ট্যান্ডার্ড ইনপুট" (এসটিডিআইএন), "স্ট্যান্ডার্ড আউটপুট" (এসটিডিআউট) এবং "স্ট্যান্ডার্ড ত্রুটি" (এসটিডিআরআর)।

বেশিরভাগ কমান্ডগুলি STDIN থেকে তাদের ইনপুট গ্রহণ করে এবং তাদের আউটপুট STDOUT এ লিখবে write তারা STDERR এ ত্রুটি বার্তা লিখেন write এই কনভেনশন আপনাকে সম্মিলিত পাইপলাইনগুলি তৈরি করতে ব্লক নির্মাণের মতো কমান্ডগুলি একসাথে স্ট্রিং করতে দেয়।

শেল প্রতীক ব্যাখ্যা করে <, >এবং >>নির্দেশাবলী হিসাবে অথবা একটি ফাইল থেকে একটি কমান্ড ইনপুট অথবা আউটপুট রুট পরিবর্তন করতে।

একটি কমান্ডের STDOUT অন্যটির STDIN এর সাথে সংযুক্ত করতে, | প্রতীকটি ব্যবহার করুন , সাধারণত পাইপ হিসাবে পরিচিত।

ps -ef | grep httpd

সুতরাং মূলত এটি যা বলছে তা হ'ল স্ট্যান্ডার্ড ইনপুট হ'ল একটি আদেশ যা ব্যবহারকারীকে একটি ফাইল লিখতে দেয়, যখন স্ট্যান্ডার্ড আউটপুট এমন একটি কমান্ড যার শ্যাটে বাশ শেল লেখার আউটপুট থাকে এবং মানক ত্রুটি ঠিক আউটপুটের মতো হয় তবে এটি কেবল ফাইল সিস্টেমে কোনও ত্রুটি থাকলে অনুরোধ করা হয়েছিল। তারপরে আমরা STDOUT এবং STDIN সংযোগ করার অংশে পৌঁছেছি এবং আমি হারিয়ে গিয়েছি।

উত্তর:


25

স্ট্যান্ডার্ড ইনপুট এবং স্ট্যান্ডার্ড আউটপুট কমান্ড নয়।

একটি সমাবেশ লাইনের একটি কারখানায় মেশিন হিসাবে কমান্ডগুলি কল্পনা করুন। বেশিরভাগ মেশিনগুলিতে ডেটা ফিড করার জন্য একটি পরিবাহক বেল্ট এবং ডেটা ফিড করার জন্য একটি পরিবাহক বেল্ট ডিজাইন করা হয়; এগুলি যথাক্রমে স্ট্যান্ডার্ড ইনপুট এবং মান আউটপুট। স্ট্যান্ডার্ড ত্রুটিটি মেশিনের পাশের একটি উদ্বোধন যেখানে এটি প্রত্যাখ্যান করে দিতে পারে।

+-------+     +------------------+       +------------------+     +------+
| input |     |    machine A     |       |    machine B     |     |output|
| reser ­­­|=====|<stdin     stdout>|=======|<stdin     stdout>|=====|bucket|
| voir |    |      stderr      |      |      stderr      |    |      |
+-------+     +------------------+       +------------------+     +------+
                      ||                          ||

উপরের চিত্রটি একটি পরিবাহক বেল্ট দেখায় যা দুটি মেশিনের মধ্য দিয়ে যায়। বাম দিকের ইনপুট জলাশয় থেকে ডেটা আসে, মেশিন এ এ খাওয়ানো হয়, তারপরে আউটপুটটি মেশিন বিতে আরও জানানো হয় (যার জন্য এটি ইনপুট), এবং মেশিন বি এর আউটপুট ডানদিকে আউটপুট বালতিতে জমা হয়।

ইউনিক্সের ভাষায়, এটিকে পাইপলাইন বলা হয় । রূপকটি নদীর গভীরতানির্ণয়: একটি পাইপ মেশিন A কে মেশিন বিতে সংযুক্ত করে উপরের পাইপলাইনের জন্য শেল সিনট্যাক্সটি

<input-file.txt commandA | commandB >output-file.txt

< ফেরৎ প্রতীক শেল বলে সংযোগ করতে commandAফাইলে এর মান ইনপুট input-file.txtচালু করার আগে commandA। (আপনি কমান্ড নামের আগে বা তারপরে পুনর্নির্দেশটি রাখতে পারেন)) >পুনঃনির্দেশ প্রতীকটি শেলটির commandBমান আউটপুট সাথে সংযোগ করতে বলে output-file.txt|মাঝখানে পাইপ (" ") চিহ্ন শেলটিকে প্রবর্তন করার আগে commandAএর স্ট্যান্ডার্ড আউটপুটটির মান ইনপুটটিতে সংযুক্ত করতে বলে commandB

কমান্ডগুলির একাধিক ইনপুট এবং একাধিক আউটপুট থাকতে পারে তবে এটি অন্য দিনের জন্য উপাদান ।


3
ভিজ্যুয়াল অনেক সাহায্য করেছিল
জনমারলিনো

চমৎকার উপমা। আমি বহু বছর ধরে স্ট্রিম পাইপলাইনটির ধারণাটি বুঝতে পেরেছি, তবে কারও কারও কারখানা / পরিবাহক উপমাটি ব্যবহার করা হয়নি, যা এটি সত্যই সহজেই (এবং সংলগ্নভাবে) বোধগম্য করে তোলে। ধন্যবাদ!
ওভেন ব্ল্যাকার

1
দুর্দান্ত উপমা। যদি আপনি কিছু মনে করেন না তবে এইটি ধার নিতে যাচ্ছেন।
টিভি

গিলস, আমি নীচে আপনার ফ্রেসিংয়ের জন্য একটি প্রশ্ন জিজ্ঞাসা করেছি: unix.stackexchange.com/q/96724/29146 । আপনি কি স্পষ্ট করতে পারেন?
strugee

@ গিলস - আপনি কি এমন কোনও উদাহরণ অন্তর্ভুক্ত করতে পারেন যা কমান্ডের আগে বা পরে পুনঃনির্দেশের সংজ্ঞা দেওয়ার বিকল্পটি চিত্রিত করে? উদাহরণস্বরূপ, পাইপলাইনটি ইনপুট-ফাইল.txt> কমান্ডএ বা ইনপুট-ফাইল.txt <কমান্ডএ হিসাবে পড়তে পারে?
23:38

6

standard input is a command that allows user to write to a file

আদেশ নয়, একটি ধারা stream স্ট্যান্ডার্ড ইন এবং আউট মেল বাক্সগুলির মতো। যখন কোনও প্রোগ্রাম শুরু হয়, তখন এটির জন্য একটি বাক্স এবং মেল প্রেরণের জন্য একটি বাক্স দেওয়া হয়। সাধারণত, ইনপুটটি কীবোর্ড থেকে আসে এবং তা ইন-বক্সে রাখা হয়, আউট-বক্সে রাখা মেলটি আপনার টার্মিনাল স্ক্রিনে শেষ হয়।

standard output is a command that has the bash shell write output to the shell

প্রোগ্রামটি আসলে স্ট্যান্ড আউট পয়েন্টগুলি জানে না। আপনি যখন A থেকে B টি পাইপ করেন (যেমন হিসাবে $ A | B), যখন A আউট-বক্সে মেল রাখে, এটি বি এর ইন-বাক্সে শেষ হয়। বি ইনপুটটি প্রসেস করে এবং নিজস্ব মেলটি আউট-বাক্সে রাখে, যা আপনি টার্মিনালে দেখেন।

রূপকটি ড্রপ করতে, উল্লিখিত হিসাবে, স্ট্যান্ডার্ড ইন / আউট স্ট্রিম। মেল বক্স, বা ফাইল বর্ণনাকারী , প্রবাহের এক প্রান্ত। পাইপটি হ'ল A এর বাইরে মানকে বি এর মানের সাথে সংযুক্ত করতে হয় pipe

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.