You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET 5中使用Process类执行Linux管道链式命令

.NET 5 Process类执行Linux管道命令方案

问题背景

需要通过.NET 5的Process类实现和Linux终端一致的命令链式调用效果,例如执行如下命令查询系统总内存:

cat /proc/meminfo | grep MemTotal

单独执行cat命令并传入/proc/meminfo参数可以正常运行,但无法直接执行带管道符的整串命令。

错误尝试与报错

曾尝试将Process.StartInfo.FileName设置为/bin/bash,直接把cat /proc/meminfo | grep MemTotal作为参数传入,运行失败,报错信息如下:

/usr/bin/cat: /usr/bin/cat: cannot execute binary file

可行解决方案

实现原理

管道符|是shell(如sh、bash)提供的语法特性,不属于单个进程的调用能力,因此需要将整串命令交给shell进程解析执行,通过shell的-c参数传入完整命令串即可。

实现代码

Process process = new Process();
process.StartInfo.FileName = "/bin/sh";
string cmd = "cat /proc/meminfo | grep MemTotal";
process.StartInfo.Arguments = $"-c \"{cmd}\"";

process.StartInfo.RedirectStandardOutput = true;
process.Start();
process.WaitForExit();
Console.WriteLine(process.StandardOutput.ReadToEnd());

注意事项

  • 如果命令中包含引号、特殊字符,需要提前做好转义处理,避免和参数外层的引号冲突
  • 若需要捕获命令的错误输出,可额外配置process.StartInfo.RedirectStandardError = true,运行后读取process.StandardError的内容即可
  • 可以根据实际需求替换/bin/sh为/bin/bash等其他shell路径,使用方式一致

内容的提问来源于stack exchange,提问作者ChillSheep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:27:02