搜索stackoverflow和Google这个问题仅在Windows和.NET的上下文中得到解答,而不是在OSX上的Unity3D中使用的Mono版本。无论出于何种原因,我发现的解决方案或答案都没有在Unity3D的OSX Mono上发挥作用。我有可能做一些令人难以置信的愚蠢的事情,或者可能是Unity3D的Mono + OSX上出现了根本性的问题。因此这个问题
我正在尝试使用C#,Mono(Unity3D),OSX执行一个简单的命令。为了简单起见,这是来自shell的命令
/bin/sh -c "echo \"hello world\""
有效。这是我的C#代码
// original working line
// /bin/sh -c "echo \"hello world\""
string args = @"-c ""echo \""hello world\""""";
var proc = new System.Diagnostics.Process {
StartInfo = new System.Diagnostics.ProcessStartInfo {
FileName = "/bin/sh",
Arguments = args,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
},
};
proc.Start();
string result = proc.StandardOutput.ReadToEnd();
result += proc.StandardError.ReadToEnd();
Debug.Log(proc.ExitCode);
Debug.Log(result);
失败了
Win32Exception: ApplicationName='/bin/sh', CommandLine='-c "echo \"hello world\""', CurrentDirectory=''
您可以看到参数(即CommandLine=
)似乎是正确的
删除内部引号有效
string args = @"-c ""echo hello world""";
但当然我最终需要引用我的实际用例。
如何在Mono(Unity3D)OSX上将引号传递给Process.Start
?
事实证明,这是Unity3D中Mono特有的一些问题。如果在Xamarin Studio中运行相同的代码,它将按预期工作。
仍在寻找可能的解决方法。
答案 0 :(得分:0)
[“]符号通知有关开始或结束字符串,因此需要将此处理为简单符号,只要需要使用[\]字符,或者使用unicode / ascii代码。
你的例子:
// -c "echo \"hello world\""
string args = "-c \"echo \"hello world\"\"";
为了能够从IO流中读取,您需要确保该过程正确启动。 您可以通过以下方式完成此操作:
proc.WaitForInputIdle();
然后你应该能够从它的IO中读取。