带进程的字符串引号。从C#开始,Mono 3.5(Unity),OSX
搜索stackoverflow和Google这个问题只在Windows和.NET环境下得到了回答,而不是在OSX上的Unity3D中使用的Mono版本。无论出于何种原因,我所发现的解决方案或答案都无法在Unity3D的Mono on OSX上实现。有可能是我做了一些非常愚蠢的事情,也有可能是Unity3D的Mono+OSX根本出了问题。所以这个问题 我正在尝试使用C#、Mono(Unity3D)、OSX执行一个简单的命令。为了简单起见,下面是来自shell的命令带进程的字符串引号。从C#开始,Mono 3.5(Unity),OSX,c#,macos,unity3d,mono,C#,Macos,Unity3d,Mono,搜索stackoverflow和Google这个问题只在Windows和.NET环境下得到了回答,而不是在OSX上的Unity3D中使用的Mono版本。无论出于何种原因,我所发现的解决方案或答案都无法在Unity3D的Mono on OSX上实现。有可能是我做了一些非常愚蠢的事情,也有可能是Unity3D的Mono+OSX根本出了问题。所以这个问题 我正在尝试使用C#、Mono(Unity3D)、OSX执行一个简单的命令。为了简单起见,下面是来自shell的命令 /bin/sh -c "echo
/bin/sh -c "echo \"hello world\""
这很有效。这是我的C代码
它失败了
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中运行相同的代码,它将按预期工作
仍在寻找可能的解决方法。符号[“]表示开始或结束字符串,要将其视为简单符号,您需要在需要使用引号时使用[\]字符,或使用unicode/ascii代码
你的例子是:
// -c "echo \"hello world\""
string args = "-c \"echo \"hello world\"\"";
为了能够读取IO流,您需要确保进程正确启动。
您可以简单地通过以下方式实现:
proc.WaitForInputIdle();
然后您应该能够从它的IO中读取。符号[“]通知开始或结束字符串,要将其视为简单符号,您需要在需要使用引号或使用unicode/ascii代码时使用[\]字符
你的例子是:
// -c "echo \"hello world\""
string args = "-c \"echo \"hello world\"\"";
为了能够读取IO流,您需要确保进程正确启动。
您可以简单地通过以下方式实现:
proc.WaitForInputIdle();
那么你应该可以从它的IO上阅读。我的声誉是21k加上也许你会给我一个好处,怀疑我已经为此工作了6个小时了。Mono+OSX+C#没有像Windows上的.NET那样被很好地覆盖。顺便说一下,你的代码在centos上对我来说很好。令人惊讶的是,OSX上有任何不同。请参见上文。这显然是Unity中使用的mono的问题。在Xamarin的研究中效果很好,我的声誉是21k加上也许你会给我一个好处,怀疑我已经为此工作了6个小时了。Mono+OSX+C#没有像Windows上的.NET那样被很好地覆盖。顺便说一下,你的代码在centos上对我来说很好。令人惊讶的是,OSX上有任何不同。请参见上文。这显然是Unity中使用的mono的问题。在Xamarin StudioThank中效果很好,但是你的例子没有任何意义。请参见语法突出显示。
@
符号表示字符串末尾有一个引号,反斜杠只是一个文字反斜杠,表示您的行不是有效的C。我不知道你想让我做什么。如果您想让我在整个过程中为每个引用传递反斜杠,它将是@“-c\”echo\”hello world\”代码>但这毫无意义。你真的希望第一个和最后一个引号都有斜杠吗?这不是你在评论中说的。也许你的意思是@“-c”“echo”“hello world”“代码>但这正是我所拥有的。对不起,我的坏朋友在复制时没有注意到“@”符号。但是,当你从一开始就删除“@”并等待输入时,这应该是有效的(至少对我来说是有效的):,即使没有at符号,也没有任何意义。未转义的字符串是-c“echo”hello world”“
。如果您想传递-c“echo\“hello world\”
,则需要字符串args=“-c\”echo\“hello world\”代码>。它在Unity3D的Mono中也起作用吗?(因为这是个问题)如上所述,我的原始示例在正常单声道中工作。唯一失败的是统一的单声道。它不是统一的单声道,只是简单的单声道。是的,这适用于Mono,但是Unity有它自己的限制,所以我建议阅读这些:谢谢,但是你的例子没有任何意义。请参见语法突出显示。@
符号表示字符串末尾有一个引号,反斜杠只是一个文字反斜杠,表示您的行不是有效的C。我不知道你想让我做什么。如果您想让我在整个过程中为每个引用传递反斜杠,它将是@“-c\”echo\”hello world\”代码>但这毫无意义。你真的希望第一个和最后一个引号都有斜杠吗?这不是你在评论中说的。也许你的意思是@“-c”“echo”“hello world”“代码>但这正是我所拥有的。对不起,我的坏朋友在复制时没有注意到“@”符号。但是,当你从一开始就删除“@”并等待输入时,这应该是有效的(至少对我来说是有效的):,即使没有at符号,也没有任何意义。未转义的字符串是-c“echo”hello world”“
。如果您想传递-c“echo\“hello world\”
,则需要字符串args=“-c\”echo\“hello world\”代码>。它在Unity3D的Mono中也起作用吗?(因为这是个问题)如上所述,我的原始示例在正常单声道中工作。唯一失败的是统一的单声道。它不是统一的单声道,只是简单的单声道。是的,这适用于Mono,但Unity有其自身的限制,因此我建议阅读这些内容: