Bash 逃逸';运行';cygwin中的命令行选项

Bash 逃逸';运行';cygwin中的命令行选项,bash,cygwin,Bash,Cygwin,我在通过“运行”将参数传递到windows端时遇到问题 为了演示,它看起来像这样: run C:\foo.exe /BUILD </cygdrive/d/sandbox> $ run ls -la </cygdrive/d/sandbox> $ “/BUILD”参数永远不会传递给可执行文件。有人知道吗 有什么办法可以解决这个问题吗 谢谢 我不经常使用Cygwin,但可能: 运行“c:\foo.exe/BUILD” (如果不是单引号,那么可能是双引号?您是否尝试过用引号

我在通过“运行”将参数传递到windows端时遇到问题

为了演示,它看起来像这样:

run C:\foo.exe /BUILD
</cygdrive/d/sandbox> $ run ls -la
</cygdrive/d/sandbox> $
“/BUILD”参数永远不会传递给可执行文件。有人知道吗 有什么办法可以解决这个问题吗


谢谢

我不经常使用Cygwin,但可能:

运行“c:\foo.exe/BUILD”


(如果不是单引号,那么可能是双引号?

您是否尝试过用引号将其括起来,如:

run "C:\foo.exe /BUILD"

我想知道shell是否弄不清楚该参数属于谁——也就是说,“run”正在使用/BUILD,而不是传递它。

foo.exe应该做什么,您如何知道它没有获得/BUILD命令行选项?如果您执行
info run
操作,您将获得:

Windows  programs  are  either  GUI  programs or console programs. When
started console  programs  will  either  attach  to an existing console
or  create a new one. GUI programs can  never attach to an exiting con-
sole. There is no way to attach to an existing console but hide  it  if
started as GUI program.

run  will  do this for you. It works  as intermediate and starts a pro-
gram but makes the console window hidden.
最后一点很重要——它隐藏了控制台窗口。因此,您将看到如下内容:

run C:\foo.exe /BUILD
</cygdrive/d/sandbox> $ run ls -la
</cygdrive/d/sandbox> $
$run ls-la
$
但如果您运行此命令,您将看到一些不同的内容:

</cygdrive/d/sandbox> $ cat foo.lst
cat: foo.lst: No such file or directory
</cygdrive/d/sandbox> $ run ls -la >foo.lst
</cygdrive/d/sandbox> $
</cygdrive/d/sandbox> $ cat foo.lst
total 9272280
drwx------+ 15 jcasadonte     ????????             0 Feb  7 10:39 .
drwxrwxr-x+ 14 Administrators SYSTEM               0 Feb  7 00:44 ..
-rwx------+  1 jcasadonte     ????????         26300 Apr 10  2006 ATT01779.jpg
[...etc...]
$cat foo.lst
cat:foo.lst:没有这样的文件或目录
$run ls-la>foo.lst
$
$cat foo.lst
总数9272280
drwx-----+15 jcasadonte????????二月七日上午十时三十九分。
drwxrwxr-x+14管理员系统0二月7日00:44。。
-rwx-----+1 jcasadonte????????26300 2006年4月10日ATT01779.jpg
[……等……]
第一个命令正在运行,但它正在打印到一个不存在的控制台窗口


注意:我会用DOS命令解释器来完成这个例子,就像你试图做的那样,但是XP cmd.exe不能正确处理'>',并将它交给
run
而不是
ls

正确答案,经过大量研究后,我将其传递给一个批处理文件,强制“run”只执行一个cmd,将所有执行传递给批处理文件。

更新:为了澄清,我尝试传递了用引号转义的整个字符串,即:run“c:\foo.exe/BUILD”,使用double-\:run“c:\\foo.exe/BUILD”不是更好吗,忘了提到=]我发现这个问题在msys下寻找类似的问题。解决方案是在msys下使用double//。我想提及它,因为它可能会帮助其他人,或者在cygwin下也会起到同样的作用