为什么输入重定向在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,因为后者不让我写完整的密码,并且失败地说密码不匹配。

有人能解释一下吗?

为什么输入重定向在sudo中默认工作,而在passwd中不工作?(. net)

默认情况下,passwd通常不使用标准I/O(主要是出于安全原因)。你可以检查你的passwd手册页,看看是否有一个选项,使工作室-例如passwd --stdin。如果没有,则需要使用其他实用程序,如chpasswd

总之,与。net无关。你也不能在shell中做同样的事情:)密码不是为应用程序或脚本准备的——它们是为用户准备的。