明确使用“sudo -S”的目的是什么?

明确使用“sudo -S”的目的是什么?

来自 sudo 的联机帮助页:

-S,--stdin

将提示写入标准错误并从标准输入读取密码,而不是使用终端设备。密码后面必须跟有换行符。

sudo -S使用而不是仅仅的目的是什么sudo

  • sudo默认情况下从标准输入读取密码是否正确?

  • “将提示写入标准错误”的目的是什么?默认情况下是否sudo将其写入标准输出?

  • 它们都要求密码后面必须跟换行符吗?

例如,在https://stackoverflow.com/a/39553081/156458sudo -S true仍然需要输入密码,那么它如何解决该帖子中的原始问题呢?当我搜索解决方案时我发现了该链接我应该在某个 shell 配置文件中运行需要 sudo 的脚本吗?

谢谢。


更新:

J.Taylor 的回复说

sudo默认情况下不从标准输入读取密码 - 它从终端界面读取密码。

我想知道如何从实施角度理解它。

当程序从标准输入读取时,它从标准输入始终绑定到的文件描述符 0 读取,这是否正确?

为什么使用without时无法判断是sudo使用标准输入还是终端?sudo-S

程序(例如sudo -S)如何实现从终端读取而不是标准输入?

答案1

sudo不是从中读取密码标准输入默认情况下 - 它从终端接口。使用sudo -S允许您从另一个命令/文件中输入密码,如下所示:printf "yourpassword\n" | sudo -S nano /etc/apt/sources.list

这可以在 shell 脚本中使用,在不提示输入密码的情况下登录 sudo,但是您需要注意不要直接从 shell 执行这种操作,因为这样您的 sudo 密码将在 shell 历史记录中。

相关内容