2009-04-24 8 views
15

Lorsque j'exécute un script .bat à partir de bash dans Cygwin, par quel mécanisme est-il en cours d'exécution? Je comprends que si je cours un .EXE il lancera, indépendamment du fait que le .EXE soit de Cygwin ou d'un environnement plus traditionnel. Je comprends que lorsque j'exécute un script exécutable aveC#! au début que Cygwin fournit la magie pour qu'il fonctionne.Pourquoi est-ce que Cygwin peut exécuter des scripts .bat?

Mais pourquoi un script .bat fonctionne-t-il? Y at-il un composant à l'intérieur de Cygwin qui est conscient de ce qu'est un script Windows .bat et que faire avec? Ou est-ce qu'il est en quelque sorte impossible sous Windows d'exécuter un appel pour lancer un fichier .EXE qui ne fonctionnera pas automatiquement pour un script .bat à la place?

Répondre

10

Je crois que bash dans cygwin voit l'extension de chauve-souris comme étant un exécutable marqué (un point d'accès cygwin à la convention de Windows). En tant que tel, il charge et exécute le fichier avec son interpréteur associé (cmd.exe, configuration per os), tout comme il crée une nouvelle instance de bash pour exécuter votre #! scripts (selon la norme posix).

+1

Pour les scripts shell UNIX normaux, il faut charger le programme qui est spécifié après le shebang, pas aveuglément bash (et les scripts qui spécifient bash risquent de ne pas être très portables :)) – Joey

+0

Cela fonctionne pour .bat mais pas pour .ps1 (PowerShell). Cygwin doit avoir une gestion intégrée des fichiers .bat. –

9

Courir

./test.bat params 

de bash semble être équivalent à

cmd /c test.bat params 
2

Et si vous voulez à la fourchette d'une exécution de fichier * .cmd comme un processus shellscript et ajoutez son journal à un fichier:

cmd /c test.bat > nohup.out & 

Profitez-en!

Questions connexes