在C#中运行Linux控制台命令

时间:2014-07-23 12:45:00

标签: c# mono

我使用以下代码在C#应用程序中通过Mono运行Linux控制台命令:

ProcessStartInfo procStartInfo = new ProcessStartInfo("/bin/bash", "-c ls");
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;

System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();

String result = proc.StandardOutput.ReadToEnd();

这可以按预期工作。但是,如果我将命令设为"-c ls -l""-c ls /path",我仍然会在忽略-lpath的情况下获得输出。

在为命令使用多个开关时,我应该使用什么语法?

1 个答案:

答案 0 :(得分:2)

您忘了引用命令。

您是否在bash提示符下尝试以下操作?

bash -c ls -l

我强烈建议您阅读man bash。 还有getopt手册,就像bash用来解析它的参数一样。

它与bash -c ls具有完全相同的行为 为什么?因为你必须告诉bash ls -l-c的完整参数,否则-l被视为bash的参数。 bash -c 'ls -l'bash -c "ls -l"可以满足您的期望。 你必须添加这样的引号:

ProcessStartInfo procStartInfo = new ProcessStartInfo("/bin/bash", "-c 'ls -l'");