为什么输入重定向在sudo中默认工作,而在passwd中不工作?(. net)
本文关键字:工作 passwd net 而在 sudo 输入 默认 为什么 重定向 | 更新日期: 2023-09-27 18:16:31
简单的f#脚本:
#!/usr/bin/env fsharpi
open System
open System.Diagnostics
let Exec (command: string, arguments: string, echo: bool) =
let psi = new System.Diagnostics.ProcessStartInfo(command)
psi.Arguments <- arguments
psi.UseShellExecute <- false
if (echo) then
Console.WriteLine("{0} {1}", command, arguments)
let p = System.Diagnostics.Process.Start(psi)
p.WaitForExit()
p.ExitCode
Exec("sudo", "-k ls -lha /root", true)
Exec("passwd", "myusername", true)
(但实际上这是一个通用的"。我猜是这个问题,因为你可以用c#写同样的东西)
为什么第一个Exec()调用工作和第二个不?
第一个正确调用sudo,并且sudo询问我的密码(我甚至可能没有键入密码,它再次询问我,因此它与stdin中使用的载波返回数无关)。
然而,第二个只允许我写一个字符,然后突然退出。它似乎没有正确地将字符重定向到passwd
,因为后者不让我写完整的密码,并且失败地说密码不匹配。
有人能解释一下吗?
默认情况下,passwd
通常不使用标准I/O(主要是出于安全原因)。你可以检查你的passwd
手册页,看看是否有一个选项,使工作室-例如passwd --stdin
。如果没有,则需要使用其他实用程序,如chpasswd
。
总之,与。net无关。你也不能在shell中做同样的事情:)密码不是为应用程序或脚本准备的——它们是为用户准备的。