我在通过“运行”将参数传递到 Windows 端时遇到问题
为了演示,它看起来像这样:
run C:\foo.exe /BUILD
'/BUILD' 参数永远不会传递给可执行文件。有人知道解决这个问题的方法吗?
谢谢!
经过大量研究后,正确的答案是通过批处理文件传递它 - 强制“运行”只执行一个 cmd,将所有执行传递给批处理文件。
我不经常使用 Cygwin,但可能:
run 'c:\foo.exe /BUILD'
(如果不是单引号,那么可能是双引号?)
您是否尝试将其括在引号中,例如:
run "C:\foo.exe /BUILD"
我想知道 shell 是否混淆了参数属于谁 - 也就是说,“运行”正在消耗 /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.
最后一点很重要——它隐藏了控制台窗口。所以,你会看到这样的东西:
</cygdrive/d/sandbox> $ run ls -la
</cygdrive/d/sandbox> $
但如果你改为运行它,你会看到不同的东西:
</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...]
第一个命令正在运行,但它正在打印到一个不存在的控制台窗口。
注意:我会使用 DOS 命令解释器来完成该示例,就像您正在尝试做的那样,但是 XP cmd.exe 没有正确处理“>”,并将其交给run
而不是ls
.