En supposant que j'ai un script test.sh qui exécute un serveur et Git Bash installé, comment créer un raccourci Windows que je peux double-cliquer pour exécuter tesh.sh dans Git Bash au premier plan et me permet de voir la sortie du serveur ?
Git bash est déjà un fichier batch avec un contenu similaire à celui-ci:
C:\WINNT\system32\cmd.exe /c ""C:\Git\bin\sh.exe" --login -i"
Si vous voulez exécuter (et laisser tourner) un script Shell dans le contexte du Shell, spécifiez-le sur la ligne de commande. L'astuce est que lorsque le nom du fichier de script est interprété, il utilise le chemin Windows , pas le chemin équivalent dans l'environnement sh/Git.
En d'autres termes, pour exécuter le fichier D:\temp\test.sh
dans le Git Shell et laissez-le fonctionner, créez ce fichier batch:
C:\WINNT\system32\cmd.exe /c ""C:\Git\bin\sh.exe" --login -i -- D:\temp\test.sh"
D'un autre côté, si vous voulez exécuter un script et récupérer votre Shell, vous devez:
~/.profile
(essayez vi ~/.profile
)~/test.sh
(ajustez le chemin si nécessaire)Donc avec un .profile
qui ressemble à ceci:
echo Executing .profile
/bin/sh ~/test.sh
Et test.sh
qui ressemble à ceci:
echo Hello, World!
Vous obtiendrez cette invite:
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 ~
$
D'autres réponses fonctionnent, mais il existe une solution plus courte, qui répond pleinement à la question , qui était:
Comment créer un raccourci Windows que je peux double-cliquer pour exécuter
tesh.sh
dans Git Bash
La réponse est: ajoutez la commande suivante au Target:
champ du raccourci:
"C:\Git\bin\sh.exe" -l "D:\test.sh"
Où, -l
est l'abréviation de --login
.
Pour mieux comprendre ce que fait cette commande, consultez les documents officiels GNU about Invoking Bash :
-l
(--login
): Faites en sorte que ce Shell agisse comme s'il avait été directement invoqué par la connexion. Lorsque le shell est interactif, cela revient à démarrer un shell de connexion avecexec -l bash
. Lorsque le shell n'est pas interactif, les fichiers de démarrage du shell de connexion sont exécutés.exec bash -l
ouexec bash --login
remplacera le shell actuel par un shell de connexion Bash.
Notez également que:
sh.exe
ou l'avoir dans votre variable d'environnement PATH
(comme d'autres l'ont déjà souligné).-i
optionLa meilleure solution à mon avis:
Procédez comme suit:
Créez un raccourci vers mintty.exe
sur votre bureau, par exemple. Il se trouve sous %installation dir%/Git/usr/bin/mintty.exe
Modifier les propriétés du raccourci et changer la cible (garder le chemin):
"C:\Program Files\Git\usr\bin\mintty.exe" -h always /bin/bash -l -e 'D:\folder\script.sh'
Explication des paramètres:
-h always
maintient la fenêtre ouverte lorsque le script est terminé, de sorte que la fenêtre ne disparaîtra pas pendant que vous lisez la sortie (supprimez-la si vous n'avez pas besoin de lire la sortie et que vous souhaitez que la fenêtre se ferme automatiquement).
-l
fait en sorte que ce Shell agisse comme s'il avait été directement invoqué par connexion.
-e
se ferme immédiatement si un pipeline retourne un état non nul ( plus d'informations ).
Je recommande d'utiliser la variable d'environnement %ComSpec%
, Au lieu du chemin absolu vers cmd
:
%ComSpec% /c ""C:\Program Files (x86)\Git\bin\sh.exe" --login -i"
ou même simplement la commande cmd
, qui est généralement disponible à partir de % PATH%:
cmd /c ""C:\Program Files (x86)\Git\bin\sh.exe" --login -i"
si votre C:\Program Files (x86)\Git\bin
ajoutée à PATH
(qui est également une solution courante et l'un des cas sur TortoiseGit installation) vous pouvez utiliser simplement:
cmd /c "sh --login -i"