2009-04-24 20 views
15

Cuando ejecuto un script .bat desde bash en Cygwin, ¿mediante qué mecanismo se está ejecutando? Entiendo que si ejecuto un .EXE se ejecutará, independientemente de si .EXE es de Cygwin o de un entorno más tradicional. Lo entiendo cuando ejecuto un script ejecutable con #! al principio que Cygwin proporciona la magia para que se ejecute.¿Por qué Cygwin puede ejecutar scripts .bat?

¿Pero por qué funciona una secuencia de comandos .bat? ¿Hay algún componente dentro de Cygwin que sepa qué es un script .bat de Windows y qué hacer con él? ¿O es que de alguna manera es imposible en Windows ejecutar una llamada para iniciar un archivo .EXE que no funcionará automáticamente para un script .bat?

Respuesta

10

Creo que bash in cygwin considera que la extensión bat está marcada como ejecutable (una convención de hit-tip to windows de cygwin). Como tal, carga y ejecuta el archivo con su intérprete asociado (cmd.exe, configuración per os), ¡al igual que crea una nueva instancia de bash para ejecutar tu #! scripts (por posix estándar).

+1

Para las secuencias de comandos de shell UNIX normales, debe cargar el programa que se especifica después del shebang, no utilizar ciegamente bash (y las secuencias de comandos que especifican bash es probable que no sean muy portátiles :)) – Joey

+0

Esto funciona para .bat pero no para .ps1 (PowerShell). Cygwin debe tener un manejo integrado de los archivos .bat. –

9

Correr

./test.bat params 

de fiesta parece ser equivalente a

cmd /c test.bat params 
2

Y si quieres que desembolsar una ejecución * .cmd como un proceso de ShellScript y anexar su registro a un archivo:

cmd /c test.bat > nohup.out & 

Enjoy!

Cuestiones relacionadas