Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带进程的字符串引号。从C#开始,Mono 3.5(Unity),OSX_C#_Macos_Unity3d_Mono - Fatal编程技术网

带进程的字符串引号。从C#开始,Mono 3.5(Unity),OSX

带进程的字符串引号。从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

搜索stackoverflow和Google这个问题只在Windows和.NET环境下得到了回答,而不是在OSX上的Unity3D中使用的Mono版本。无论出于何种原因,我所发现的解决方案或答案都无法在Unity3D的Mono on OSX上实现。有可能是我做了一些非常愚蠢的事情,也有可能是Unity3D的Mono+OSX根本出了问题。所以这个问题

我正在尝试使用C#、Mono(Unity3D)、OSX执行一个简单的命令。为了简单起见,下面是来自shell的命令

/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有其自身的限制,因此我建议阅读这些内容: