2011-11-27 28 views
18

Sé cuando se instala Cygwin hay un archivo por lotes que se utiliza para iniciarlo en Windows. Pero si quiero ejecutar un script sin iniciar Cygwin y hacer "./script"Cygwin ejecutando secuencia de comandos de un archivo por lotes?

¿Cómo creo un archivo por lotes para hacer eso?

Al igual que en ... solo tiene un archivo de proceso por lotes que, al hacer clic, abre Cygwin y ejecuta el script de shell.

Respuesta

27

Para ejecutar "foo.bsh", crear un archivo por lotes con el siguiente contenido y ejecutarlo:

set PATH=C:\cygwin\bin;%PATH% 
    c:\cygwin\bin\bash.exe c:\path\to\foo.bsh 

La "C: \ cygwin \ bin" parte puede variar dependiendo de su ubicación de instalación elegido de cygwin.

+0

sí esto funciona ... gracias – dhroove

3

¿Qué tipo de script de shell? ¿Intento? Si necesita ejecutar un script bash, simplemente ejecútelo con bash.exe a través de un acceso directo. El destino sería algo así como:

C:\cygwin\bin\bash.exe foo.bsh 

La ruta a bash.exe dependerá de dónde se instaló cygwin. (No necesita la ruta en absoluto si el directorio bin está en su variable de entorno de ruta.)

Puede hacer lo mismo en una secuencia de comandos por lotes, si así lo desea. La línea de comando sería la misma que "objetivo" anterior.


EDITAR basándose en las observaciones (bash sigue suponiendo):

Ok, por lo que en la secuencia de comandos por lotes (.bat) sólo tiene que escribir:

bash.exe script.txt 

Es posible que tenga que añadir la ruta a "bash.exe". Si no está seguro de dónde está "bash.exe", abra el archivo "Cygwin.bat" que mencionó en su pregunta. Debe tener la ruta en un comando chdir. (Nota: Cygwin.bat solo está ejecutando bash.exe en modo interactivo. Realmente no ejecuta nada llamado "cygwin").

También necesitará agregar la ruta a "script.txt" si no es así en el mismo directorio que su secuencia de comandos por lotes.

De nuevo, esto también funcionará en un acceso directo en lugar de un script por lotes.

+0

Bueno, quiero ejecutar un script de shell. Pero no quiero tener que abrir Cywgin y luego escribir todo eso para ejecutarlo. Prefiero simplemente ejecutar un archivo por lotes para abrir cygwin y luego hacerlo de esa manera si es posible. – Aaron

+1

@ Aaron - Escriba todo qué cosas? Cualquier línea de comando, incluidos los argumentos de línea de comando, que se utilizan para ejecutar el script en cygwin se puede agregar al acceso directo o al script por lotes. Cygwin no se abrirá, pero sí lo hará una ventana de cmd. Debería cerrarse cuando la secuencia de comandos haya terminado de ejecutarse. –

+0

Tengo un script de shell que ejecuto en cygwin. Me preguntaba si podría crear un archivo por lotes que lo hiciera todo por mí en lugar de escribirlo todo. Pero no estoy seguro de cómo usar cygwin en el archivo por lotes. – Aaron

8

Usted puede tratar de algo como esto para cama elástica de CMD para golpear (o lo que sea sh-variante):

: <<TRAMPOLINE 
    @echo off 
    bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1) 
    bash "%~f0" "%*" 
    goto :EOF 
    TRAMPOLINE 
    ##################### 
    #!/bin/bash -- it's traditional! 
    echo "Hello from $SHELL" 
+1

Esto funcionó muy bien para mí, pero descubrí que tenía que usar terminaciones de línea de estilo UNIX cuando guardaba el archivo para asegurarme de que el script bash era feliz. – gdt

5

me gustaría ampliar la respuesta dada por Austin Hastings para permitir que funcione sin Cygwin en la ruta y para trabajar en la configuración del directorio con el archivo bat (por lo que incluso se utiliza un acceso directo con una ruta diferente "Iniciar en"). Los cambios deben incluir la ruta completa a bash, use la opción -l para configurar correctamente el bash con las rutas y el entorno y para pasar el directorio actual a bash como el primer argumento que se muestra (usando shift). Recuerde utilizar líneas nuevas de Unix en el archivo o obtendrá muchos errores. También use UTF8 en lugar de ANSI.

: <<TRAMPOLINE 
@echo off 
C:\cygwin\bin\bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1) 
setlocal EnableDelayedExpansion 
for %%i in (%*) do set _args= !_args! "%%~i" 
C:\cygwin\bin\bash -l "%~f0" "%CD%" %_args% 
goto :EOF 
TRAMPOLINE 
##################### 
#!/bin/bash -- it's traditional! 
cd "$1" 
shift 
echo Working from $PWD 

Editar: Se corrigió el código del trampolín para pasar argumentos correctamente a bash. Los archivos BAT no tienen un equivalente bash de "$ @" y se procesa un bucle para cada argumento y luego se pasa a bash.exe. Ahora maneja adecuadamente los argumentos con espacios.

+0

¿Cómo salimos de este comando? poner 'exit/B' después de' TRAMPOLINE' no funciona. –

+0

Simplemente escriba 'exit' como entorno después de que la línea' TRAMPOLINE' esté en 'bash'. 'exit/B' es un comando' cmd'. – galmok

+0

pregunté porque en mi caso 'exit' parecía que no estaba funcionando. Desde entonces descubrí que era porque estaba creando un shell de inicio de sesión (-I) y algo en mi '.bashrc' etc. estaba creando instancias de bash adicionales que estaban rondando en el fondo (impidiendo así que la salida destruyera la ventana de cmd) . –

0

Para ejecutar "your_bash_file" de cualquier archivo .bat, escriba la línea siguiente a .bat:

git-bash.exe (path_to_your_bash_file>)

P. S. Windows Git es necesario instalado

1

Si también desea abrir el script en una ventana pequeña, esto (basado en la respuesta de @galmok) hará el truco.

: <<TRAMPOLINE 
@echo off 
C:\Users\user\Downloads\cyg-packages\bin\bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1) 
setlocal EnableDelayedExpansion 
for %%i in (%*) do set _args= !_args! "%%~i" 
C:\Users\user\Downloads\cyg-packages\bin\mintty.exe -i /Cygwin-Terminal.ico C:\Users\user\Downloads\cyg-packages\bin\bash -l "%~f0" "%CD%" %_args% 
goto :EOF 
TRAMPOLINE 
##################### 
#!/bin/bash -- it's traditional! 
cd "$1" 
shift 
echo Working from $PWD 
vim "[email protected]" 

Nota: mi uso de los casos fue la necesidad de abrir un terminal de vim desde Visual Studio, que es por eso que hay una llamada a vim al final. El archivo por lotes saldrá después.

Cuestiones relacionadas