Question Exécuter un script shell sur Windows en utilisant Cygwin


J'ai du mal à exécuter le script .sh sous Windows en utilisant Cygwin.

Quand je lance le fichier: ./build.sh -s srv.txt Je reçois: ./build.sh: line 1: #!/bin/bash: No such file or directory

Pouvez-vous m'aider? La 1ère ligne est commentée :)

Merci.


4
2017-10-05 21:27


origine


Est bash in /bin? Est-ce exécutable (chmod + x / bin / bash)? - zero2cx
Je l'ai fait, oui, bash donne /usr/bin/bash - elbek


Réponses:


J'ai eu le même problème en exécutant cygwin sous Windows. Pour moi, ça n'avait rien à voir avec le chemin.

Cela avait tout à voir avec l'encodage. J'utilisais UTF-8 avec le BOM (marque d'ordre des octets). La nomenclature provoquait un étouffement. Une fois que je l'ai enlevé, cela a fonctionné parfaitement.

J'ai mis à jour l'encodage en utilisant Notepad ++ en:

Encodage -> Encodage en UTF-8 sans nomenclature

le which bash commande sortie:

/usr/bin/bash

Cependant, il était encore capable de résoudre

#!/bin/bash

4
2018-06-18 14:13





Cela signifie généralement qu'il y a un ^M (retour chariot) à la fin de chaque ligne de votre fichier ou d’autres problèmes d’encodage empêchant le #!/bin/bash ligne interprétée correctement.

Prenez une copie du fichier et sauvegardez-la au format ASCII simple en utilisant un éditeur de votre choix pour supprimer autant de codage non-ASCII que possible. Essayez également de l'enregistrer au format 'UNIX' si l'éditeur le prend en charge.


3
2017-10-05 21:55



Qu'est-ce que vim? J'ai notepad ++, je suis sur windows. - elbek
vim est un éditeur de fichiers unix, si le fichier ne sera pas exécuté sous Cygwin, le meilleur moyen est de savoir pourquoi sous Cygwin. Le problème est que vous enregistrez un fichier Windows (qui a des retours chariot) et sauts de ligne) et essayer de l'exécuter sous Cygwin. Si vous le pouvez, dites à Notepad ++ de sauvegarder au format «Unix». - EightBitTony
Je l'ai fait, il y a une option pour le rendre au format UNIX et je l'ai fait en utilisant notepad ++ - elbek
Pouvez-vous au moins essayer ce que je suggère? Modifiez-le dans vim (dans votre type de shell Cygwin, vim build.sh), puis tapez ce que j'ai dit et vérifiez si les symboles ^ M apparaissent à la fin de chaque ligne. - EightBitTony
Utilisez ceci pour voir si vous avez les fins de ligne appropriées: <pre> od -c </ pre> Cette commande montre exactement quels caractères sont présents. - UtahJarhead


Avez-vous essayé de courir ...

sh build.sh

Au lieu de...

./build.sh

Je ne suis pas sûr (je n'ai jamais couru Cygwin) mais il semble que /bin/bash n'est pas un chemin dans votre machine, alors votre shebang (#!/bin/bash) souffle le programme.

Si vous exécutez le programme en utilisant sh le shebang doit être traité comme un commentaire.

J'espère que cela t'aides.


2
2018-03-11 10:07





#!/bin/bash (appelé un shebang, abréviation de Crash (#) Bang (!), indique au shell quel programme utiliser pour exécuter le script en question. Vous verrez cela avec les scripts Perl (#!/usr/bin/perl), Python (#!/usr/bin/python), ou php (#!/usr/bin/php) ainsi que.

Dans votre situation, certaines choses pourraient être la cause. Soit le shell 'bash' n'est pas installé ou le script est dans un format non reconnu que vous ne pouvez pas voir.

D'abord, bash existe-t-il? Donnez-nous les résultats de ceci: ls -l /bin/bash

Deuxièmement, que contient le script? Donnez-nous les 2 premières lignes de ceci: od -c build.sh  Ce que nous recherchons, c'est que le script soit dans un mauvais format. Windows aime CRLF'ou \r\n pour une ligne se terminant alors que Linux n'aime que LF ou \n (voir également: http://en.wikipedia.org/wiki/Newline)

Pour être honnête, je ne sais pas si CYGWIN aime les fins de ligne Windows ou Linux, mais c'est probablement la cause de votre problème.

Encore une fois, donnez-nous la sortie de od -c build.sh et nous verrons ce qui se passe.


1
2017-10-06 01:10





Dans le passé, j'ai rencontré des problèmes / M dans des scripts python écrits sur une boîte Windows et essayant de les utiliser sur un boîtier Linux. J'ai utilisé dos2unix pour convertir les fichiers afin de les rendre exploitables sur la boîte Linux. Si des retours chariot (ou d'autres problèmes de mise en forme du texte Windows) existent et sont à l'origine du problème, cela peut aider.


0
2017-08-20 16:21