回答:
実際、の典型的な呼び出しはsudo、パスワードをまったく読み取りませんstdin。代わりに、sudo制御端末に直接アクセスし(特殊ファイルを介してttyまたは)、プロンプトを出力し、文字を直接読み取ります。これは、ソース内のファイルで確認できます。pty/dev/ttytgetpass.csudo
他にもいくつかのシナリオがあります。
askpassたとえば、-Aparamでプログラムが指定されている場合、そのプログラムが呼び出されます。sudo読み取りを要求すると、プロンプトがに書き込まれます。これは、MadHatterの答えが当てはまる場合です。stdin-Sstderrtty利用可能なものがない場合
visiblepwフラグによって制御されますsudoers)、sudoエラーを報告します。no tty present and no askpass program specifiedsudo使用にフォールバックされます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それを確認しようとすることができます。代わりに、sudotty に直接アクセスします。