1
簡單的F#腳本:爲什麼輸入重定向默認爲sudo而不是passwd? (.NET)
#!/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)
(但其實這是一個通用的 「.NET在Linux上」 的問題,我猜,因爲你可以寫同樣在C#)
爲什麼第一個Exec()調用起作用,第二個不起作用?
第一個叫須藤正常,而須藤問我要我的密碼(我甚至可以不輸入它,它再次問到我,所以它不是關係到標準輸入採用載波回報數) 。
但是,第二個只允許我寫一個字符並突然退出。它似乎沒有正確地將字符重定向到passwd
,因爲後者不讓我寫完整的密碼,並且沒有說密碼不匹配。
有人可以解釋這一點嗎?
如果passwd不是從標準輸入中收集密碼,它怎麼能收集密碼呢? – knocte
@knocte直接從終端。不要忘了,標準輸入流只是一個文本流 - 你不可能將它用於諸如屏蔽或隱藏輸入之類的東西,就像沒有在標準輸出中定位文本光標一樣。在Windows上也是如此 - 例如只使用'Console.WriteLine'和'Console.CursorTop'之間的區別:)如果您看到一個控制檯應用程序執行比「向輸出流添加另一個字符」更復雜的任何操作,知道它不使用stdio。 – Luaan