Jawaban:
Sebenarnya, doa tipikal dari sudotidak membaca kata sandi stdinsama sekali. Sebagai gantinya, sudoakan langsung mengakses terminal pengendali (a ttyatau pty, melalui /dev/ttyfile khusus) dan menampilkan prompt dan membaca karakter secara langsung. Ini bisa dilihat pada tgetpass.cfile di sudosumbernya.
Ada beberapa skenario lain:
askpassprogram ditentukan, misalnya dalam -Aparam, program itu akan dipanggil.sudountuk membaca stdin, misalnya dengan -Sbendera - dan itu juga akan menulis prompt untuk stderr. Inilah kasus di mana jawaban MadHatter berlaku.ttytersedia
visiblepwflag in sudoers), sudoakan melaporkan kesalahan:no tty present and no askpass program specifiedsudoakan kembali menggunakan stdindan stderrbahkan jika itu tidak secara khusus diminta. Jawaban MadHatter juga akan berlaku di sini.Pipa menghubungkan sudo catstdout ke lessstdin, sehingga sudo catstdin tidak terpengaruh, dan dapat menerima kata sandi.
Adapun prompt, itu keluar sudo catdi stderr; di bash, coba redirect dengan stdout, gunakan
sudo cat /etc/resolv.conf |& less
dan lihat betapa berbedanya responsnya.
sudostdin masih terhubung ke terminal dengan contoh perintah, itu tidak secara langsung relevan dengan bagaimana ia mendapatkan kata sandinya: secara defaultsudotidak akan meminta kata sandi melalui stdin juga tidak akan menampilkan prompt melaluistderr- Anda dapat mencoba2>/dev/nullmengonfirmasi itu. Sebaliknya,sudolangsung mengakses tty.