回答:
実際、の典型的な呼び出しはsudo
、パスワードをまったく読み取りませんstdin
。代わりに、sudo
制御端末に直接アクセスし(特殊ファイルを介してtty
または)、プロンプトを出力し、文字を直接読み取ります。これは、ソース内のファイルで確認できます。pty
/dev/tty
tgetpass.c
sudo
他にもいくつかのシナリオがあります。
askpass
たとえば、-A
paramでプログラムが指定されている場合、そのプログラムが呼び出されます。sudo
読み取りを要求すると、プロンプトがに書き込まれます。これは、MadHatterの答えが当てはまる場合です。stdin
-S
stderr
tty
利用可能なものがない場合
visiblepw
フラグによって制御されますsudoers
)、sudo
エラーを報告します。no tty present and no askpass program specified
sudo
使用にフォールバックされますstdin
とstderr
、それを具体的に要求されなかった場合でも。MadHatterの回答もここに適用されます。パイプはsudo cat
のstdout less
をのstdinに接続するため、sudo cat
のstdinは影響を受けず、パスワードを受け取ることができます。
プロンプトについては、sudo cat
のstderrに表示されます。bashでは、stdoutと一緒にリダイレクトしてみてください
sudo cat /etc/resolv.conf |& less
応答の違いを確認してください。
sudo
、例のコマンドでまだstdinが端末に接続されているという点で正しいですが、パスワードの取得方法とは直接関係ありません:デフォルトでsudo
は、stdinを介してパスワードを要求したり、プロンプトを表示したりしませstderr
ん2>/dev/null
それを確認しようとすることができます。代わりに、sudo
tty に直接アクセスします。