commands - Acceso directo de Windows para ejecutar script git bash
git windows xp (4)
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 comando. 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 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 quiere ejecutar un script y recuperar su shell , debe:
- Abre el caparazón como está
- Edite o cree
~/.profile
(pruebevi ~/.profile
) - Agregue esta línea:
~/test.sh
(ajdust la ruta si es necesario)
Entonces con un .profile
que se ve así:
echo Executing .profile
/bin/sh ~/test.sh
Y test.sh
que se ve así:
echo Hello, World!
Recibirá 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 ~
$
Suponiendo que tengo un script test.sh que ejecuta un servidor y Git Bash instalado, ¿cómo creo un acceso directo de Windows que puedo hacer doble clic para ejecutar tesh.sh en Git Bash en primer plano y me permite ver el resultado del servidor ?
La mejor solución en mi opinión:
Invoca el shell correcto, sin ventanas innecesarias e invoca un script bash después; la ventana permanecerá abierta después de que salga la secuencia de comandos:
Cree un acceso directo a
mintty.exe
en su escritorio, por ejemploEdite las propiedades del atajo y cambie el objetivo (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 finalizó, por lo que la ventana no desaparecerá mientras todavía esté leyendo la salida (elimínela 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 el inicio de sesión.
-e
sale inmediatamente si una tubería devuelve un estado distinto de cero ( más información ).
Otras respuestas funcionan, pero hay una solución más corta, que responde completamente a la pregunta , que fue:
Cómo crear un atajo 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 acceso directo:
"C:/Git/bin/sh.exe" -l "D:/test.sh"
Donde, -l
es la abreviatura de --login
.
Para comprender mejor lo que hace este comando, consulta con los documentos oficiales de GNU sobre Invocar Bash :
-l
(--login
): hacer que este shell actúe como si hubiera sido invocado directamente por el inicio de sesión. Cuando el shell es interactivo, esto es equivalente a iniciar un shell de inicio de sesión conexec -l bash
. Cuando el shell no es interactivo, se ejecutarán los archivos de inicio del shell de inicio de sesión.exec bash -l
oexec bash --login
reemplazará el shell actual con un shell Bash de inicio de sesión.
También tenga en cuenta que:
- O necesita la ruta completa a
sh.exe
o la tiene en suPATH
entornoPATH
(como ya han señalado otros). - 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 debe ejecutarse. Esta ruta debe estar en formato de Windows.
Recomiendo 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 el comando 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
agregó a PATH
(que también es una solución común y uno de los casos en la instalación de TortoiseGit ) puede usar simplemente:
cmd /c "sh --login -i"