Запуск cmd.exe из Cygwin


16

Я хотел бы использовать Cygwin для своей основной оболочки на работе, но моя группа использует пакетные файлы для нескольких процессов. Мне сказали, что я могу просто cmd /c batch.batзапустить командный файл из Cygwin. Это работает для некоторых случаев, а не для других. Когда я это делаю, один из командных файлов полностью выходит из строя, но работает нормально, когда я запускаю его из оболочки cmd.

Еще одна странность, которую я заметил, заключается в том, что если я запускаю cmd /?из Cygwin, я не получаю вывод. Запуск этого из оболочки cmd дает стандартную помощь. Даже делать cmd /c cmd /?ничего не дает. Если я запускаю cmdиз Cygwin, он дает мне оболочку cmd, а затем, если я запускаю cmd /?, я получаю текст справки, но без разрывов страниц.

Я думаю, что следующая вещь, которую стоит попробовать, - это найти способ запустить cmd в своем собственном отдельном окне, как если бы вы пошли в «Пуск» - «Выполнить», а затем набрали «cmd». Есть ли способ сделать это из Cygwin?

Ответы:


8

/?bash рассматривается как шаблон, где знак вопроса будет соответствовать одному символу, поэтому, если у вас есть какие-либо однобуквенные файлы или каталоги в корне Cygwin, шаблон будет заменен на них. echo /?покажет вам, если это то, что происходит. Вы можете избежать вопросительный знак обратной косой черты: /\?. Или процитировать весь аргумент '/?'.

cygstart c:/windows/system32/cmd запустит cmd.exe в своем собственном окне.


на моем win xp sp2 latop этот следующий фрагмент кода будет работать: cygstart / cygdrive / c / WINDOWS / system32 / cmd
Майкл Мао

14

Вы можете запустить командный файл непосредственно из оболочки Cygwin, вам даже не нужен промежуточный вызов cmd. Если пакетный файл требует аргументов, они должны быть заключены в кавычки в стиле Windows; это может быть проще для запуска cmd /c 'foo.bat "quoted arguments"'.

Вы не говорите, в каком терминале вы запускаете оболочку. Пакетные файлы сами по себе не заботятся об этом, но команды, которые выполняются из пакетных файлов, могут. Эмуляторы терминалов Cygwin не эмулируют консоли Windows, поэтому они хороши для программ Cygwin и только для stdio-программ, но не для консольных программ Windows.

Если обычно запускаются оболочки Cygwin в терминале Cygwin (например, rxvt или mintty), вы можете запускать пакетные файлы неполадок в отдельной консоли Windows с помощью start foo.bat. Возможно, вы захотите запустить Console2 как лучшую замену консоли Windows и запустить консольные приложения Windows в приложениях Console2 и Cygwin в терминале Cygwin (или даже в Console2).

cmd /?это красная сельдь: предположительно, в корневом каталоге Cygwin есть каталоги длиной в один символ, поэтому оболочка расширяется /?и запускается cmdс переключателями, которые не дают выходных данных.


Мне нужно было вставить переменные оболочки в аргументы cmd, поэтому я решил, что следующее может работать с парсерами Bash и cmd: u = 'DOMAIN \ ACC' p = 'X <12' r = '{Baz 3.1 5-x - (TTT )} 'd = $' \ "'cmd / c foo.bat -u% d %% u %% d% -p% d %% p %% d% -fooBar% d %% r %% d% - fooBAR верно
угорь ghEEz
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.