我有一个 C# 命令行应用程序,我需要在 windows 和 unix 的 mono 下运行。在某些时候,我想在给定一组通过命令行传入的任意参数的情况下启动一个子进程。例如:
Usage: mycommandline [-args] -- [arbitrary program]
不幸的是,System.Diagnostics.ProcessStartInfo 只接受一个字符串作为参数。这是诸如以下命令的问题:
./my_commandline myarg1 myarg2 -- grep "a b c" foo.txt
在这种情况下,argv 看起来像:
argv = {"my_commandline", "myarg1", "myarg2", "--", "grep", "a b c", "foo.txt"}
请注意,“ab c”周围的引号被外壳剥离,所以如果我简单地连接参数以便为 ProcessStartInfo 创建 arg 字符串,我会得到:
args = "my_commandline myarg1 myarg2 -- grep a b c foo.txt"
这不是我想要的。
是否有一种简单的方法可以将 argv 传递给 C# 下的子进程启动,或者将任意 argv 转换为对 windows 和 linux shell 合法的字符串?
任何帮助将不胜感激。