如何在Red Hat Linux中运行Mono / MonoDevelop的bash命令?

时间:2014-07-29 18:32:53

标签: c# mono monodevelop redhat

我想使用C#和MonoDevelop运行以下bash命令并将输出存储到变量。

  

./ TestApp --H

我的MonoDevelop代码:

    Process proc = new Process();
    proc.StartInfo.FileName = "/bin/bash";
    proc.StartInfo.Arguments = "/usr/mono/TestApp  --H";
    proc.StartInfo.UseShellExecute = false; 
    proc.StartInfo.RedirectStandardErrort = true;
    proc.StartInfo.RedirectStandardInput = true;
    proc.StartInfo.RedirectStandardOutput = true;
    proc.Start();
    var output = proc.RedirectStandardOutput.ReadToEnd()

以上代码无效。输出变量没有按预期获得值。

如果我使用shell脚本修改上面的代码,那么它的工作。

Test.sh

    #!/bin/bash
    /usr/mono/TestApp  --H;

修改后的单声道代码:

proc.StartInfo.Arguments = "Test.sh";

谢谢

1 个答案:

答案 0 :(得分:1)

如果/usr/mono/TestApp不是shell脚本(对于你的问题,我猜它不是),这应该有效(你不需要bash来运行程序):

Process proc = new Process();
proc.StartInfo.FileName = "/usr/mono/TestApp";
proc.StartInfo.Arguments = "--H";
proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
var output = proc.StandardOutput.ReadToEnd ();
Console.WriteLine("stdout: {0}", output);

顺便说一下,使用重定向时要小心。如果TestApp进程和Mono进程之间的管道已满,您的应用程序将无法完成(存在死锁)阅读文档以获取更多信息:RedirectStandardOutput