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

本文关键字:控制台 命令 Linux 运行 | 更新日期: 2023-09-27 18:14:16

我使用以下代码在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的输出。

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

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

您忘记在中引用命令了。

您是否在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'");