在 Bash 4 中运行以下命令,sudo
会提示输入密码:
$ echo '' | sudo true
[sudo] password for mike:
(我对将密码传输到 不感兴趣sudo
;这是我在故障排除时发现的行为的演示。)
据我了解,TTY 检测是通过检查标准输入的文件描述符来进行的。该tty
程序支持这一点:
$ tty
/dev/pts/26
$ echo '' | tty
not a tty
...但sudo
似乎正在使用其他一些机制。setsid
具有预期的效果,所以我的猜测是这在某种程度上与会话有关。
$ setsid sudo true
sudo: no tty present and no askpass program specified
那么到底在忙什么呢sudo
?
答案1
它打开/dev/tty
(正如 Jeff Schaller 使用宏所提到的_PATH_TTY
),提供对控制终端的访问,无论是哪个终端(如果有的话)。看我当前的控制终端和`/dev/tty`之间有什么关系?了解详情。