web-dev-qa-db-fra.com

Exécution d'un script Shell via Cygwin sous Windows

J'ai un tas de scripts Shell qui fonctionnaient sur une machine Linux. Maintenant, nous sommes passés à Windows et je dois y exécuter ces scripts. J'ai Cygwin installé, mais existe-t-il un moyen d'exécuter le script à l'aide de Cygwin, mais l'appel est effectué à partir d'un lot Windows ?

58
rainman_s

Sûr. Sur ma (jolie vanille) configuration Cygwin, bash est dans c:\cygwin\bin afin que je puisse exécuter un script bash (disons testit.sh) à partir d’un fichier de commandes Windows à l’aide d’une commande telle que:

C:\cygwin\bin\bash testit.sh

... qui peut être inclus dans un .bat fichier aussi facilement qu'il est possible de le taper sur la ligne de commande et avec le même effet.

78
Simon

Une dernière chose - si vous avez modifié le script Shell dans un éditeur de texte Windows, ce qui produit le fichier \r\n les fins de ligne, la bash de cygwin n'accepterait pas ces \r. Il suffit de courir dos2unix testit.sh _ avant d’exécuter le script:

C:\cygwin\bin\dos2unix testit.sh
C:\cygwin\bin\bash testit.sh
38
Roman Hocke

Si vous avez accès à l'éditeur Notepad ++ sous Windows, une fonctionnalité vous permet de contourner facilement ce problème:

  1. Ouvrez le fichier qui donne l'erreur dans Notepad ++.
  2. Allez dans le menu "Edition" et choisissez "Conversion EOL"
  3. Il existe une option pour "Format UNIX/OSX". Choisissez cette option.
  4. Ré-enregistrez le fichier.

Je l'ai fait et cela a résolu mes problèmes.

J'espère que cela t'aides!

En savoir plus sur le site http://danieladeniji.wordpress.com/2013/03/07/Microsoft-windows-cygwin-error-r-command-not-found/

25
jseals

Je voulais juste ajouter que vous pouvez le faire pour appliquer la correction dos2unix à tous les fichiers d'un répertoire, car cela m'a permis de gagner beaucoup de temps lorsque nous avons dû "réparer" plusieurs de nos scripts.

find . -type f -exec dos2unix.exe {} \;

Je le ferais comme commentaire à la réponse de Roman, mais je n'ai pas encore accès aux commentaires.

8
tsaulic

Les réponses existantes semblent toutes exécuter ce script dans une fenêtre de la console DOS.

Cela peut être acceptable, mais cela signifie par exemple que les codes de couleur (changer la couleur du texte) ne fonctionnent pas mais sont plutôt imprimés tels quels:

il n'y a pas d'article "[032mGroovy [0m"

J'ai trouvé cette solution il y a quelque temps, alors je ne suis pas sûr si mintty.exe est un utilitaire Cygwin standard ou si vous devez exécuter le programme setup pour l'obtenir, mais j'exécute comme ceci:

D:\apps\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico  bash.exe .\myShellScript.sh

... le script s'exécute dans une console Cygwin BASH au lieu d'une console Windows DOS.

1
mike rodent

Si vous ne voyez pas d'inconvénient à toujours inclure .sh dans le nom du fichier de script, vous pouvez conserver le même script pour Cygwin et Unix (Macbook).

Pour illustrer:
1. Incluez toujours le nom de fichier .sh dans votre nom de fichier de script, par exemple, test1.sh
2. test1.sh ressemble à l'exemple suivant:
#!/bin/bash echo '$0 = ' $0 echo '$1 = ' $1 filepath=$1</ code> 3. Sous Windows avec Cygwin, vous tapez "test1.sh" pour exécuter
4. Sous Unix, vous tapez également "test1.sh" pour exécuter


Remarque: Sous Windows, vous devez utiliser l’explorateur de fichiers pour effectuer les opérations suivantes:
1. Ouvrez l'explorateur de fichiers
2. Cliquez avec le bouton droit sur un fichier avec l'extension .sh, tel que test1.sh
3. Ouvrir avec ... -> Select sh.exe
Ensuite, votre Windows 10 se souvient d’exécuter tous les fichiers .sh avec sh.exe.

Remarque: Avec cette méthode, vous n'avez pas besoin de faire précéder votre nom de fichier de script avec bash pour qu'il s'exécute.

1
david m lee