Je sais que lorsque Cygwin installe un fichier de commandes utilisé pour le lancer sous Windows. Mais si je veux exécuter un script sans lancer Cygwin et faire "./script"
Comment créer un fichier batch pour le faire?
Comme dans ... juste un fichier de commandes qui, lorsque vous cliquez dessus, ouvre Cygwin et exécute le script Shell.
Pour exécuter "foo.bsh", créez un fichier de commandes avec le contenu suivant et exécutez-le:
set PATH=C:\cygwin\bin;%PATH%
c:\cygwin\bin\bash.exe c:\path\to\foo.bsh
La partie "C:\cygwin\bin" peut différer en fonction de l'emplacement d'installation choisi de cygwin.
Vous pouvez essayer quelque chose comme ceci sur un trampoline de CMD à BASH (ou toute autre variante de sh):
: <<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"
J'aimerais développer la réponse donnée par Austin Hastings pour lui permettre de fonctionner sans Cygwin dans le chemin et dans la configuration du répertoire avec le fichier bat (même un raccourci avec un chemin "Démarrer dans" différent est utilisé) . Les modifications doivent inclure le chemin complet vers bash, utilisez l'option -l
pour configurer correctement bash avec les chemins d'accès et l'environnement, puis transmettez le répertoire en cours à bash en tant que premier argument affiché (à l'aide de shift
). N'oubliez pas d'utiliser les sauts de lignes Unix dans le fichier, sinon vous obtiendrez de nombreuses erreurs. Utilisez également UTF8 au lieu 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
Edit: Correction du code de trampoline pour passer les arguments correctement à bash. Les fichiers BAT n'ont pas d'équivalent bash de "$ @" et une boucle traitant chaque argument est créée puis passée à bash.exe. Maintenant, gère correctement les arguments avec des espaces.
Quel genre de script shell? Frapper? Si vous devez exécuter un script bash, exécutez-le simplement avec bash.exe via un raccourci. La cible serait quelque chose comme:
C:\cygwin\bin\bash.exe foo.bsh
Le chemin d'accès à bash.exe dépend de l'emplacement d'installation de cygwin. (Vous n'avez pas du tout besoin du chemin si le répertoire bin est dans la variable d'environnement de votre chemin.)
Vous pouvez faire la même chose dans un script batch si vous voulez. La ligne de commande serait la même que "cible" ci-dessus.
EDIT BASÉ SUR DES COMMENTAIRES (en supposant toujours bash):
Ok, donc dans votre script batch (.bat), tapez simplement:
bash.exe script.txt
Vous devrez peut-être ajouter le chemin d'accès à "bash.exe". Si vous ne savez pas où se trouve "bash.exe", ouvrez le fichier "Cygwin.bat" que vous avez mentionné dans votre question. Il devrait avoir le chemin dans une commande chdir
. (Remarque: Cygwin.bat ne fait que lancer bash.exe en mode interactif. Il n’exécute aucun élément nommé "cygwin".)
Vous devrez également ajouter le chemin d'accès à "script.txt" s'il ne se trouve pas dans le même répertoire que votre script batch.
Encore une fois, cela fonctionnera également dans un raccourci au lieu d'un script batch.
Si vous voulez également ouvrir le script dans une fenêtre menthe, ceci (basé sur la réponse de @ galmok) fera l'affaire.
: <<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 "$@"
Remarque: mon cas d'utilisation était la nécessité d'ouvrir un terminal vim à partir de Visual Studio. C'est pourquoi il existe un appel à vim
à la fin. Le fichier de commandes se fermera par la suite.
Pour exécuter "votre_fichier_bash" à partir de n'importe quel fichier .bat, écrivez la ligne suivante dans .bat:
git-bash.exe (path_to_your_bash_file>)
P.S. Windows Git est nécessaire installé