Respostas:
Na verdade, uma chamada típica de sudonão lê a senha stdin. Em vez disso, sudoacessará diretamente o terminal de controle (a ttyou pty, através do /dev/ttyarquivo especial) e emitirá o prompt e lerá os caracteres diretamente. Isso pode ser visto no tgetpass.carquivo na sudofonte.
Existem alguns outros cenários:
askpassprograma for especificado, por exemplo, no -Aparâmetro, esse programa será chamado.sudoa leitura de stdin, por exemplo, com a -Sbandeira - e ela também escreverá o prompt em stderr. É o caso em que a resposta do MadHatter se aplica.ttydisponível
visiblepwsinalizador sudoers), sudoserá relatado um erro:no tty present and no askpass program specifiedsudovoltará a usar stdine, stderrmesmo que não tenha sido solicitado especificamente. A resposta do MadHatter também será aplicada aqui.O pipe conecta sudo cato stdout ao lessstdin, para que sudo cato stdin não seja afetado e possa receber a senha.
Quanto ao prompt, ele sai no sudo catstderr; no bash, tente redirecioná-lo junto com stdout, usando
sudo cat /etc/resolv.conf |& less
e veja quão diferente é a resposta.
sudoo stdin ainda está conectado ao terminal com o comando de exemplo, isso não é diretamente relevante para a maneira como obtém sua senha: por padrãosudo, não solicitará senhas via stdin nem exibirá o prompt viastderr- você pode tentar2>/dev/nullconfirmar isso. Em vez disso,sudoacessa diretamente o tty.