जवाबों:
वास्तव में, एक सामान्य मंगलाचरण 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 specified
sudo
उपयोग करने के लिए वापस गिर जाएगा stdin
और stderr
यहां तक कि अगर यह विशेष रूप से अनुरोध नहीं किया गया था। मदहैटर का उत्तर भी यहाँ लागू होगा।पाइप sudo cat
स्टडआउट को स्टडिन से जोड़ता है less
, इसलिए sudo cat
स्टड अप्रभावित है, और पासवर्ड प्राप्त करने में सक्षम है।
संकेत के रूप में, यह बाहर जाता है sudo cat
stderr; कोलाहल में, पुन: निर्देशित करने का प्रयास करें कि stdout के साथ, का उपयोग करके
sudo cat /etc/resolv.conf |& less
और देखें कि प्रतिक्रिया कितनी अलग है।
sudo
स्टैडेन अभी भी उदाहरण कमांड के साथ टर्मिनल से जुड़ा है, यह सीधे तौर पर प्रासंगिक नहीं है कि यह अपना पासवर्ड कैसे प्राप्त करता है: डिफ़ॉल्ट रूपsudo
से स्टड के माध्यम से पासवर्ड का अनुरोध नहीं करेगा और न ही इसके माध्यम से संकेत देगाstderr
- आप इस बात की2>/dev/null
पुष्टि करने की कोशिश कर सकते हैं । इसके बजाय,sudo
सीधे tty तक पहुँचता है।