Acceso directo de Windows para ejecutar el script git bash


Suponiendo que tengo un test.sh script que ejecuta 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 primer plano y me permite ver la salida del servidor?

Author: konyak, 2014-02-05

4 answers

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

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

Si desea ejecutar (y dejar en ejecución) un script de shell en el contexto del shell, especifíquelo en la línea de comandos. El truco es que cuando se interpreta el nombre del archivo de script, utiliza la ruta de Windows , no la ruta equivalente en el entorno sh/Git.

En otras palabras, para ejecutar el archivo D:\temp\test.sh en el shell de Git y dejarlo en ejecución, cree este archivo por lotes :

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

Por otro lado, si quieres ejecutar un script y recuperar tu shell , debes:

  1. Abre el shell tal cual
  2. Editar o crear ~/.profile (try vi ~/.profile)
  3. Añadir esta línea: ~/test.sh (ajdust la ruta 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 ve así:

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!

ixe013@PARALINT01 ~
$
 57
Author: ixe013,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-05 15:38:35

Otras respuestas funcionan, pero hay una solución más corta, que responde plenamente 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 al campo Target: del atajo:

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

introduzca la descripción de la imagen aquí

Donde, -l es la abreviatura de --login.

Para entender mejor lo que hace este comando, consulte con documentos oficiales de GNU sobre La invocación de Bash :

  • -l (--login): Haga que este shell actúe como si hubiera sido invocado directamente por login. Cuando el shell es interactivo, esto es equivalente para iniciar un shell de inicio de sesión con exec -l bash. Cuando la cáscara es no es interactivo, se ejecutarán los archivos de inicio del shell de inicio de sesión. exec bash -l o exec bash --login reemplazará la actual shell con un shell de inicio de sesión Bash.

También tenga en cuenta que:

  • Usted necesita la ruta completa a sh.exe o tenerla en su variable de entorno PATH (como otros ya han señalado).
  • Si realmente necesita forzar la invocación del shell en modo interactivo, puede agregar la opción -i
  • El último parámetro es la ruta al script que tiene que ser ejecutado. Esta ruta debe estar en formato Windows.
 19
Author: quasoft,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-28 16:58:40

Recomendaría usar la variable de entorno %ComSpec%, en lugar de la ruta absoluta a cmd:

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

O incluso solo la orden cmd, que generalmente está disponible desde % PATH%:

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

Si su C:\Program Files (x86)\Git\bin agregado a PATH (que también es una solución común y uno de los casos en TortoiseGit instalando) puede usar solo:

cmd /c "sh --login -i"
 5
Author: radistao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-28 21:41:18

La mejor solución en mi opinión:

Invoca el shell correcto, no hay ventanas innecesarias e invoca un script bash después; la ventana permanecerá abierta después de que el script salga:

  • Cree un acceso directo a mintty.exe en su escritorio, por ejemplo

  • Edite las propiedades del acceso directo y cambie el destino (mantenga la ruta):

"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 script terminado, por lo que la ventana no desaparecerá mientras todavía está leyendo la salida (eliminar si no necesita leer la salida y desea que la ventana se cierre automáticamente).

-l hace que este shell actúe como si hubiera sido invocado directamente por login.

-e sale inmediatamente si una canalización devuelve un estado distinto de cero (más información).

 4
Author: Hannes Schneidermayer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-28 10:43:26