ব্যবহারকারীর কাছ থেকে কমান্ড পড়তে সক্ষম হয়ে কীভাবে din কম `স্টিডিনের কাছ থেকে ডেটা নেয়?


47

আপনার বেশিরভাগ লোক যেমন অনেকবার করেছেন তাই লম্বা পাঠ্যটি ব্যবহার করে সুবিধাজনক less:

some_command | less

এখন এর স্টিডিনটি একটি পাইপের সাথে সংযুক্ত (FIFO)। এটি কীভাবে এখনও উপরে / ডাউন / ছাড়ার মতো আদেশগুলি পড়তে পারে?


15
lessস্টিডিন থেকে প্রদর্শন করার জন্য ডেটা পড়ে এবং এটি টিটিআই-র আদেশগুলি পড়ে। তারা বিভিন্ন জিনিস।
উইলিয়াম পার্সেল

2
@ উইলিয়াম পার্সেল হ্যাঁ আমি জানি। তবে কেবলমাত্র একটি স্ট্যান্ডার্ড ইনপুট স্ট্রিম আছে, তাই না?
আইবুগ

4
হ্যাঁ, একটি ইনপুট স্ট্রিম এবং একটি টিটি আছে। lessস্টিডিনের ডেটা এবং টিটিআইয়ের কাছ থেকে আদেশগুলি পড়ে।
উইলিয়াম পার্সেল

উত্তর:


52

উইলিয়াম পার্সেল দ্বারা উল্লিখিত হিসাবে , lessটার্মিনাল থেকে ব্যবহারকারীর কীস্ট্রোকগুলি পড়ে। এটি স্পষ্টভাবে খোলে /dev/tty, নিয়ন্ত্রণকারী টার্মিনাল; এটি এটিকে একটি ফাইল বর্ণনাকারী দেয়, স্ট্যান্ডার্ড ইনপুট থেকে পৃথক করে, যা থেকে এটি ব্যবহারকারীর ইন্টারেক্টিভ ইনপুটটি পড়তে পারে। এটি যদি প্রয়োজন হয় তবে এটির স্ট্যান্ডার্ড ইনপুট থেকে প্রদর্শন করতে একই সাথে ডেটা পড়তে পারে। (এটি প্রয়োজনে সরাসরি টার্মিনালেও লিখতে পারে ))

আপনি দৌড়াদৌড়ি দ্বারা এটি ঘটতে দেখতে পারেন

some_command | strace -o less.trace -e open,read,write less

ইনপুটটি ঘুরে lessদেখুন , প্রস্থান করুন এবং এর সামগ্রীগুলি দেখুন less.trace: আপনি এটি খালি দেখতে পাবেন /dev/ttyএবং ফাইল বর্ণনাকারী 0 এবং উভয়ই যেটি খোলার পরে ফিরে আসবে তা /dev/ttyসম্ভবত পড়তে হবে (সম্ভবত 3)।

টার্মিনাল থেকে তারা পড়ছেন এবং লিখছেন তা নিশ্চিত করতে ইচ্ছুক প্রোগ্রামগুলির জন্য এটি সাধারণ অনুশীলন। একটি উদাহরণ এসএসএইচ, উদাহরণস্বরূপ যখন এটি কোনও পাসওয়ার্ড বা পাসফ্রেজ জিজ্ঞাসা করে।

স্কিলি দ্বারা ব্যাখ্যা হিসাবে , যদি এটি খুলতে না পারা যায় তবে এটি তার স্ট্যান্ডার্ড ত্রুটি (ফাইল বিবরণকারী 2) থেকে পড়বে। এর ব্যবহার 177 সংস্করণে প্রবর্তিত হয়েছিল, এটি 2 এপ্রিল 1991 এ প্রকাশিত হয়েছিল।/dev/ttylessless/dev/tty

আপনি যদি দৌড়ানোর চেষ্টা করেন cat /dev/tty | less, হ্যাগেন ভন ইটজেনের পরামর্শ অনুসারে , উদ্বোধনে সফল হবে তবে এটি বন্ধ না হওয়া পর্যন্ত এ থেকে কোনও ইনপুট পাবেন না । সুতরাং আপনি পর্দাটি ফাঁকা দেখতে পাবেন এবং যতক্ষণ না আপনি হত্যা করার জন্য চাপ দিন (বা অন্য কোনও উপায়ে এটি হত্যা করবেন) যতক্ষণ না ; তারপরে দৌড়ানোর সময় আপনি যা টাইপ করেছেন তা প্রদর্শন করবে এবং আপনাকে এটি নিয়ন্ত্রণ করার অনুমতি দেবে।less/dev/ttycatCtrlCcatlesscat


4
@ হ্যাভেনভোনইটজেন আপনার কম্পিউটারটি বিস্ফোরিত হবে! এটি কার্ক এবং স্পকে মুডের অ্যান্ড্রয়েড ক্র্যাশ করার মতো।
বারমার

7
পুনঃটুইট দ্বিগুণ- বিড়ালের অকেজো ব্যবহার । আমি অভিভূত.
অ্যান্ড্রু হেনেল

8
@ গ্র্যাটিটি আমার মতে অ্যান্ড্রুয়ের বক্তব্যটি cat blah |প্রতিস্থাপন করা যেতে পারে < blahএবং এটি এ ক্ষেত্রে অপ্রয়োজনীয় যেহেতু less blahখুব ভাল (ভাল, less -f /dev/tty) কাজ করে। তবে এ থেকে পড়া /dev/ttyকিছুটা বিশেষ ক্ষেত্রে, এবং তিনটি রূপই ( cat /dev/tty | less, less < /dev/ttyএবং less -f /dev/tty) বিভিন্ন ফলাফল দেয়।
স্টিফেন কিট

1
/ Dev / tty সবসময় কোনওভাবে সঠিক জায়গায় নির্দেশ করে? আমার মনে হয় আপনার সাধারণত / dev / ptsX ব্যবহার করা দরকার?
স্টারওয়েভার

2
@StarWeaver দেখতে এই প্রশ্নের মধ্যে পার্থক্য সম্পর্কে /dev/ttyএবং /dev/pts/...
স্টিফেন কিট

26

ইউএনআইএক্স স্ট্যান্ডিনকে পুনঃনির্দেশিত করার সময় ব্যবহারকারীদের ইনপুট পড়ার জন্য দুটি পদ্ধতি দেয়:

  • মূল পদ্ধতিটি স্ট্যাডার থেকে পড়া । স্ট্ডার লেখার জন্য এবং পড়ার জন্য উন্মুক্ত এবং এটি এখনও পসিক্সে উল্লেখ রয়েছে।

  • পরে ইউএনআইএক্স সংস্করণগুলি (1979 সালের প্রায়) একটি /dev/ttyড্রাইভার ইন্টারফেস যুক্ত করেছিল যা কোনও প্রক্রিয়া নিয়ন্ত্রণকারী tty খুলতে দেয়। যেহেতু একটি নিয়ন্ত্রণকারী টিটিআই ছাড়াই প্রক্রিয়া রয়েছে তাই এটি সম্ভব যে খোলার চেষ্টা /dev/ttyব্যর্থ হয়। বন্ধুত্বপূর্ণ লিখিত সফ্টওয়্যার তাই মূল পদ্ধতিতে একটি ফ্যালব্যাক এবং তারপরে stderr থেকে পড়ার চেষ্টা করে।


11
স্ট্যাডার থেকে পড়া? নতুন কিছু শিখেছি।
আইবুগ

1
আমি খুশি যে কেউ পুরানো উপায়গুলি মনে রাখে।
জোশুয়া

3
স্টার্ডার পড়ার জন্য ব্যবহৃত হয়, কারণ এটি পুনঃনির্দেশিত হওয়ার সম্ভাবনা সবচেয়ে কম? আমি এটি এবং স্টডআউট (অথবা সেই ম্যাটার স্টিডিনের জন্য, পুনঃনির্দেশের আগে) এর মধ্যে অন্য কোনও পার্থক্য দেখছি না।
ctrl-alt-delor

4
হ্যাঁ, কারণ এটি ফাইল বিবরণকারী যা পুনঃনির্দেশের সবচেয়ে কম সুযোগ আছে।
সুন্দরভাবে

@ সিটিআরএল-ওএল-ডেলর: স্টিল, স্ট্ডআউট এবং স্ট্ডার দিয়ে শেলগুলি চলার জন্য এটি সাধারণত / dup()যেটি সমস্ত একই ফাইলের বর্ণনার লাইসেন্স, যদিও সমস্তটি টিটিটিতে খোলা থাকে। (স্পষ্টতই পসিক্সের প্রয়োজনীয় পরামর্শ বা পরামর্শ দেওয়া হয় (এই উত্তরটি বলে না) যে স্টার্ডার পড়ুন / লেখার এফডি হোন, এর মতো কিছু দিয়ে খোলা হয়নি open("/dev/ttyS0", O_WRONLY)st স্টাডার পড়া সেই ক্ষেত্রে ব্যর্থ হবে would)
পিটার কর্ডস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.