Suponiendo que tengo un test.sh secuencia de comandos que se ejecuta en un servidor y Git Bash instalado, ¿cómo puedo crear un acceso directo de Windows que puedo hacer doble clic para ejecutar tesh.sh en Git Bash en el primer plano y me permite ver la salida del servidor?

InformationsquelleAutor konyak | 2014-02-04

4 Comentarios

  1. 63

    Git bash ya es un archivo de proceso por lotes con un contenido similar a este :

    C:\WINNT\system32\cmd.exe /c ""C:\Git\bin\sh.exe" --login -i"

    Si quieres (y dejar de correr) una secuencia de comandos de shell en el contexto de la concha, especificar en la línea de comandos. El truco es que cuando el nombre de archivo de comandos se interpreta, utiliza el ruta de acceso de Windows, no la ruta equivalente en el sh/Git medio ambiente.

    En otras palabras, para ejecutar el archivo D:\temp\test.sh en el Git de shell y salir corriendo, crear este archivo de proceso por lotes :

    C:\WINNT\system32\cmd.exe /c ""C:\Git\bin\sh.exe" --login -i -- D:\temp\test.sh"

    Por otro lado, si desea ejecutar una secuencia de comandos y obtener su shell de nuevo, usted debe :

    1. Abrir el shell como es
    2. Editar o crear ~/.profile (prueba vi ~/.profile)
    3. Añadir esta línea : ~/test.sh (ajdust la ruta de acceso si es necesario)

    Así que con un .profile que se parece a esto :

    echo Executing .profile
    /bin/sh ~/test.sh

    Y test.sh que se parece a esto :

    echo Hello, World!

    Obtendrá este mensaje :

    Welcome to Git (version 1.7.11-preview20120710)
    
    
    Run 'git help git' to display the help index.
    Run 'git help <command>' to display help for specific commands.
    Executing .profile
    Hello, World!
    
    [email protected] ~
    $
    • Impresionante, después de revisada la pregunta, me di cuenta de que no la necesitamos para volver a la Gish Bash prompt de la shell después de ejecutar la secuencia de comandos.
    • Es allí una manera de suprimir las cuatro líneas de «Bienvenida a Git …» en el principio?
    • Lo encontró ya que es simplemente un archivo de texto sin formato: etc/motd
    • Para muchos va a ser C:\Windows\System32\cmd.exe /c ""C:\Program Files\Git\bin\sh.exe" --login -i -- D:\temp\test.sh"
    • El uso de -i mientras que también especificar una secuencia de comandos a ejecutar es en su mayoría sin sentido – la bash instancia de no permanecer abiertos, y a la secuencia de comandos se vean como se ejecuta en un shell interactivo, que es irrelevante en el mejor, y puede resultar en un comportamiento diferente en el peor. Usted debe dejar claro que su perfil basado en la solución de invocar el script para todo el futuro de inicio de sesión de conchas, que puede ser no deseado.
    • También, mediante la ejecución de la secuencia de comandos en una ventana de consola que por defecto el Windows página de códigos OEM, puede ejecutar en carácter de los problemas de codificación.
    • Dejando a los demás a un lado los problemas, no hay necesidad de un intermediario archivo por lotes; un archivo de acceso directo, solicitado por la OP, puede utilizar este comando directamente (cmd.exe no tienen que ser involucrados): "C:\Program Files\Git\bin\sh.exe" -l D:\temp\test.sh

  2. 21

    Otras respuestas trabajo, pero hay una solución más corto, que responde a la pregunta, que era:

    Cómo crear un acceso directo de Windows que puedo hacer doble clic para ejecutar
    tesh.sh en Git Bash

    La respuesta es: agregue el siguiente comando para el Target: campo del acceso directo:

    "C:\Git\bin\sh.exe" -l "D:\test.sh"

    Acceso directo de Windows para ejecutar Git Bash script

    Donde, -l es corto para --login.

    Para entender mejor lo que este comando, consulte con el oficial de GNU docs sobre La Invocación De Bash:

    • -l (--login): Hacer de este shell actuar como si hubiera sido invocado directamente por el inicio de sesión. Cuando el shell es interactivo, esto es equivalente
      a partir de un shell de inicio de sesión con exec -l bash. Cuando el shell es
      no interactivo, el shell de inicio de sesión de inicio de los archivos será ejecutado.
      exec bash -l o exec bash --login reemplazará a la actual
      shell con un Bash shell de inicio de sesión.

    También tenga en cuenta que:

    • Usted necesita la ruta de acceso completa a sh.exe o en su PATH variable de entorno (como otros ya han señalado).
    • Si usted realmente necesita para forzar la concha de la invocación en el modo interactivo, puede agregar el -i opción
    • El último parámetro es la ruta del script que se debe ejecutar. Este camino debe ser en formato de Windows.
    • +1 Perfecto. Sólo un consejo adicional: Guardar *.sh script como UTF-8 (no Windows 1252 como el bloc de notas hace y no UTF8-BOM como Visual Studio lo hace!)
    • Tenga en cuenta que este se cierra automáticamente la ventana cuando el script finaliza, por lo que su respuesta no satisface al «me permite ver la salida del servidor» requisito. También, mediante la ejecución de la secuencia de comandos en una ventana de consola que por defecto el Windows página de códigos OEM, puede ejecutar en carácter de los problemas de codificación.
  3. 7

    Mejor solución, en mi opinión:

    • Invoca el derecho de shell
    • No innecesarios de windows
    • Invoca un script de bash después
    • Ventana permanecerá abierta después de que la secuencia de comandos de salidas

    Hacer lo siguiente:

    1. Crear un acceso directo a mintty.exe en el escritorio, por ejemplo. Se encuentra bajo %installation dir%/Git/usr/bin/mintty.exe

    2. Editar propiedades del acceso directo y cambiar el objetivo (mantener la ruta de acceso):

    "C:\Program Files\Git\usr\bin\mintty.exe" -h always /bin/bash -l -e 'D:\folder\script.sh'


    Explicación de los parámetros:

    -h always mantiene la ventana abierta cuando el guión terminado, por lo que la ventana no va a desaparecer, mientras que usted todavía está leyendo la salida (quitar si usted no necesita leer el resultado y desea que la ventana se cierre automáticamente).

    -l hace esta concha actuar como si hubiera sido invocado directamente por el inicio de sesión.

    -e sale inmediatamente si una tubería devuelve un estado distinto de cero (más info).

    • De niza. Y, si es necesario, recuerda poner «Iniciar en» – el directorio actual cuando se ejecuta la secuencia de comandos.
  4. 5

    Te recomiendo usar la variable de entorno %ComSpec%, en lugar de la ruta de acceso absoluta a cmd:

    %ComSpec% /c ""C:\Program Files (x86)\Git\bin\sh.exe" --login -i"

    o incluso sólo cmd comando, que está normalmente disponible a partir de %PATH%:

    cmd /c ""C:\Program Files (x86)\Git\bin\sh.exe" --login -i"

    si su C:\Program Files (x86)\Git\bin añadido a PATH (que es también la solución más común y uno de los casos en TortoiseGit de la instalación) se puede utilizar sólo:

    cmd /c "sh --login -i"
    • Tuve que usar cmd.exe (con el .extensión exe), de lo contrario, no iría.
    • revise su PATHEXT environmen varialbe, debería ser algo como esto .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.FSM;.WSH;.MSC
    • PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW
    • hay algún mensaje de error cuando ejecuta cmd?
    • Si crea un archivo de acceso directo como solicitado por el OP, cmd.exe no tienen que estar involucrados en todo.

Dejar respuesta

Please enter your comment!
Please enter your name here