【发布时间】:2017-03-18 08:06:20
【问题描述】:
简单的 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)
(但实际上我猜这是一个通用的“Linux 上的 .NET”问题,因为你可以用 C# 编写同样的问题)
为什么第一个 Exec() 调用有效而第二个无效?
第一个正确调用 sudo,sudo 要求我输入密码(我什至可能无法输入密码,它会再次向我询问,因此它与 stdin)。
然而,第二个只允许我写一个字,突然就掉线了。它似乎没有正确地将字符重定向到passwd,因为后者不允许我写完整的密码,并且无法说密码不匹配。
谁能解释一下?
【问题讨论】: