Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么输入重定向在默认情况下适用于sudo而不适用于passwd?(.NET)_C#_.net_Linux_F#_Stdin - Fatal编程技术网

C# 为什么输入重定向在默认情况下适用于sudo而不适用于passwd?(.NET)

C# 为什么输入重定向在默认情况下适用于sudo而不适用于passwd?(.NET),c#,.net,linux,f#,stdin,C#,.net,Linux,F#,Stdin,简单的F#脚本: #/usr/bin/env fsharpi 开放系统 开放系统诊断 let Exec(命令:string,参数:string,echo:bool)= 让psi=新系统.Diagnostics.ProcessStartInfo(命令) 参数默认情况下,passwd通常不使用标准I/O(主要是出于安全原因)。您可以查看passwd的手册页,查看是否有启用stdio的选项,例如passwd--stdin。如果没有,则需要使用不同的实用程序,如chpasswd 总之,与.NET无关。你

简单的F#脚本:

#/usr/bin/env fsharpi
开放系统
开放系统诊断
let Exec(命令:string,参数:string,echo:bool)=
让psi=新系统.Diagnostics.ProcessStartInfo(命令)

参数默认情况下,
passwd
通常不使用标准I/O(主要是出于安全原因)。您可以查看
passwd
的手册页,查看是否有启用stdio的选项,例如
passwd--stdin
。如果没有,则需要使用不同的实用程序,如
chpasswd


总之,与.NET无关。你也无法在shell中执行相同的操作:)密码不是用于应用程序或脚本的,而是用于用户的。

如果不是来自stdin,如何才能
passwd
收集密码?@knocte直接从终端获取。别忘了,标准输入流只是一个文本流——你无法将其用于屏蔽或隐藏输入,就像标准输出中没有文本光标的定位一样。在Windows上也是一样的-仅使用
Console.WriteLine
Console.CursorTop
,例如:)如果您看到一个控制台应用程序执行比“向输出流添加另一个字符”更复杂的操作,您就知道它没有使用stdio。
#!/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)