экранирование параметров командной строки run в cygwin - PullRequest
3 голосов
/ 05 февраля 2009

У меня проблемы с передачей аргументов через "run" в сторону windows

Для демонстрации это выглядит примерно так:

run C:\foo.exe /BUILD

Параметр / BUILD никогда не передается в исполняемый файл. Кто-нибудь знает способа обойти это?

Спасибо!

Ответы [ 4 ]

4 голосов
/ 10 февраля 2009

Правильный ответ после многих исследований состоял в том, чтобы пропустить это через командный файл - заставить 'run' выполнить только один cmd, передав все выполнение командному файлу.

0 голосов
/ 05 февраля 2009

Вы пытались заключить его в кавычки вроде:

run "C:\foo.exe /BUILD"

Интересно, не запуталась ли оболочка, кому принадлежит этот аргумент, то есть "run" использует / BUILD, а не передает его.

0 голосов
/ 07 февраля 2009

Что должен делать 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.

0 голосов
/ 05 февраля 2009

Я не часто использую Cygwin, но возможно:

run 'c:\foo.exe /BUILD'

(если не одиночные, то, может быть, двойные кавычки?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...