উত্তর:
প্রকৃতপক্ষে, একটি সাধারণ অনুরোধ sudoপাসওয়ার্ডটি একেবারেই পড়েন না stdin। পরিবর্তে, sudoসরাসরি নিয়ন্ত্রণকারী টার্মিনাল অ্যাক্সেস করতে হবে (একটি ttyবা pty, /dev/ttyবিশেষ ফাইলের মাধ্যমে ) এবং প্রম্পট আউটপুট এবং সরাসরি অক্ষর পড়বে। উত্সের tgetpass.cফাইলটিতে এটি দেখা যায় sudo।
আরও কয়েকটি পরিস্থিতি রয়েছে:
askpassপ্রোগ্রাম নির্দিষ্ট করা থাকে, যেমন -Aপ্যারামে, সেই প্রোগ্রামটি শুরু করা হবে।sudoপড়তে অনুরোধ stdinকরেন -S- এবং এটিতে প্রম্পটটিও লেখা হবে stderr। এটি ম্যাডহ্যাটারের উত্তরটি প্রয়োগ করে।ttyপাওয়া যায়
visiblepwফ্ল্যাগ-ইন দ্বারা নিয়ন্ত্রিত হয় sudoers), sudoত্রুটির প্রতিবেদন করবে:no tty present and no askpass program specifiedsudoব্যবহারে ফিরে আসবে stdinএবং stderrএমনকি যদি এটি বিশেষভাবে অনুরোধ করা হয়নি। ম্যাডহ্যাটারের উত্তরও এখানে প্রযোজ্য।পাইপ sudo catস্ট্যান্ডআউটকে স্টিডিনের সাথে সংযুক্ত করে less, সুতরাং sudo catএর স্টিডিনটি প্রভাবিত নয়, এবং পাসওয়ার্ডটি গ্রহণ করতে সক্ষম।
প্রম্পট হিসাবে, এটি স্টাডারের বাইরে চলে যায় sudo cat; ব্যাশে, স্ট্যান্ডআউটের পাশাপাশি এটি পুনর্নির্দেশের চেষ্টা করুন
sudo cat /etc/resolv.conf |& less
এবং দেখুন প্রতিক্রিয়াটি কতটা আলাদা।
sudoস্ট্যান্ডিন এখনও উদাহরণ কমান্ডের সাথে টার্মিনালের সাথে সংযুক্ত রয়েছে, এটি এটির পাসওয়ার্ড কীভাবে আসে তার সাথে এটি সরাসরি প্রাসঙ্গিক নয়: ডিফল্টরূপেsudoস্টিডিনের মাধ্যমে পাসওয়ার্ডগুলির অনুরোধ করবে না এবং এটির মাধ্যমে প্রম্পটটি প্রদর্শন করবে নাstderr- আপনি এটি2>/dev/nullনিশ্চিত করার চেষ্টা করতে পারেন পরিবর্তে,sudoসরাসরি tty অ্যাক্সেস।