15

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

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

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

2 ответа2

11

Вы можете запустить командный файл непосредственно из оболочки 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 с переключателями, которые не производят никакого вывода.

7

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .