Почему Cygwin может запускать сценарии .bat?

Когда я запускаю скрипт .bat из bash в Cygwin, по какому механизму он работает? Я понимаю, что если я запущу .EXE, он запустится, независимо от того, создан ли .EXE из Cygwin или из более традиционной среды. Я понимаю, что когда я запускаю исполняемый скрипт с #! в начале Cygwin предоставляет магию для его работы.

Но почему скрипт .bat работает? Есть ли какой-то компонент внутри Cygwin, который знает, что такое скрипт Windows .bat и что с ним делать? Или дело в том, что под Windows каким-то образом невозможно выполнить вызов для запуска файла .EXE, который не будет автоматически работать для сценария .bat вместо этого?


person skiphoppy    schedule 24.04.2009    source источник


Ответы (3)


Бег

./test.bat params

из bash кажется эквивалентным

cmd /c test.bat params
person Tunzi    schedule 13.03.2012

Я полагаю, что bash в cygwin видит расширение bat как помеченное как исполняемый файл (конвенция cygwin по попаданию в Windows). Таким образом, он загружает и выполняет файл с помощью связанного с ним интерпретатора (cmd.exe, конфигурация для каждой ОС), во многом так же, как он создает новый экземпляр bash для запуска вашего #! скрипты (по стандарту posix).

person BnWasteland    schedule 24.04.2009
comment
Для обычных сценариев оболочки UNIX он должен загружать программу, указанную после шебанга, а не слепо использовать bash (и сценарии, в которых указан bash, вероятно, будут не очень переносимыми :)) - person Joey; 25.04.2009
comment
Это работает для .bat, но не для .ps1 (PowerShell). Cygwin должен иметь встроенную обработку файлов .bat. - person Bogdan Calmac; 31.10.2013

И если вы хотите разветвить выполнение файла *.cmd, как процесс ShellScript, и добавить его журнал в файл:

cmd /c test.bat > nohup.out &

Наслаждаться!

person Mr. Anderson    schedule 04.07.2013