Comment exécuter le fichier .sh sur Windows?


67

Lorsque j'essaie d'exécuter un fichier (name.sh) dans la ligne de commande à l'aide de la commande ./name.sh, j'obtiens le message d'erreur suivant:

"." n'est pas reconnu en tant que commande interne ou externe, fichier exploitable ou batch

aidez-moi s'il vous plaît à exécuter le fichier .sh

Réponses:


74

Vous êtes sur Windows CMD.EXE (d'après le message d'erreur). Il utilise une syntaxe différente pour exécuter des commandes. Vous devrez utiliser sh name.sh, en supposant que vous avez installé Cygwin ou similaire.

Pour clarifier, Windows n'a pas d'utilitaire intégré pour prendre en charge les fichiers .sh. Pour ce faire, vous devez installer un outil tiers, tel que Cygwin .


7
Pourriez-vous également ne pas installer Git sous Windows? Il semble que cela ajoute la prise en charge des scripts shell même si ces scripts n'exécutent pas de tâches liées à Git.
DaveTheMinion

2
@DavidB Oui, cela fonctionne si vous mettez C: \ Program Files (x86) \ Git \ bin (ou quoi que ce soit sur votre ordinateur) dans votre PATH, car Git y place toutes sortes d'outils utiles, y compris sh.exe
Sumyrda

1
@DavidB Oui, Git Bash sait quoi en faire, c'est bien ça!
Légendes

13

Vous essayez d'exécuter une commande Linux à l'invite de commande Windows.

Sous Linux, la barre oblique est un séparateur de chemin. Sous Windows, la barre oblique inverse est un séparateur de chemin et la barre oblique indique généralement un argument.

Par conséquent, Windows pense que vous essayez d'exécuter une commande appelée "." et en analysant l'argument "/name.sh". La convention correcte serait ". \ Name.sh". De plus, Windows recherchera automatiquement votre commande dans le répertoire actuel pour que vous puissiez simplement taper "name.sh".

Le prochain problème que vous allez rencontrer est que Windows ne sait pas ce qu'est un script sh, encore une fois, il s'agit d'une chose Linux. Vous pouvez résoudre ce problème en installant Cygwin si vous voulez ou devez exécuter un script sh.

Cependant, à en juger par l’un de vos commentaires précédents, vous pouvez tout aussi bien renommer le script en name.bat et supprimer la ligne "#! / Bin / sh". Vous avez maintenant un fichier batch que Windows doit comprendre. Vous pouvez en savoir plus sur les fichiers de commandes ici .


12

Sinon, vous pouvez vous tourner vers le côté obscur et installer Linux. A l'invite:

sh runide.sh

ou

sudo sh runide.sh

Votre programme fonctionnera et vous aurez également un meilleur système.


15
C'est comme si on disait: "
Devenez

7

Meilleure solution à mon avis:

  • Téléchargez et installez .git pour Windows

  • Faites un clic droit sur le bureau et dites "git bash here"

  • Exécutez votre script comme dans Unix

  • Terminé!

Attention: beaucoup de commandes ne fonctionneront pas sous Windows! Mais encore, beaucoup de choses de base fonctionneront.

Si vous avez besoin de ce script régulièrement, vous pouvez créer un raccourci (sur votre bureau, par exemple):

  • Créer un raccourci vers mintty.exevotre bureau

  • Modifiez les propriétés du raccourci et modifiez la cible (conservez le chemin):

  • C:\Program Files\Git\usr\bin\mintty.exe" -h always /bin/bash -l -e 'D:\folder\script.sh'


Cela ne fonctionne pas. Quand je lance @FOR / f "tokens = *"% i IN ('env. Docker-machine env - shell cmd par défaut') DO @% i. Je reçois un jeton inattendu (
Steve Tomlin

5

Vous essayez de faire fonctionner votre voiture avec du jus d'orange au lieu d'essence. Windows partage des commandes similaires stockées dans des fichiers .bat ou .cmd avec des scripts de shell Unix / Linux / zOS Unix Subsystem / * ix, ces deux familles de systèmes d'exploitation partageant un ancêtre commun, les machines DEC PDP-x.

Si vous voulez une gratification immédiate, vous devrez installer un environnement fournissant un programme "sh.exe" ou un programme "csh.exe" ou "bash.exe" (quelqu'un qui vous intéresse tsh.exe?)

Alternativement, si vous connaissez très bien les commandes de script Unix et que vous connaissez les commandes de fichier Windows .cmd et .bat, vous pouvez également traduire le fichier .sh en un fichier .bat ou .cmd. Malgré cela, vous rencontrerez souvent plus de programmes de style Unix qui n’ont pas d’équivalent sous Windows - grep, sed, vi, emacs, etc. outils. Mettez-le sur un lecteur flash, pour ces occasions spéciales.


3

Quelqu'un a dit quelque chose à propos de MS-DOS en utilisant /des commandes et \des chemins. Ceci est légèrement trompeur. Regardez mon exemple:

C:\myfoo\foo\>cd../.. 
C:\myfoo\foo\>cd..\..

N'a aucune différence d'effet. Oui, ce n'est pas vrai pour toutes les opérations - la réponse réelle est simplement non , ou sans Cygwin ou SSHD, vous ne pouvez pas.

Je ne sais parce que je bêtement passé une demi - journée à essayer de comprendre ce que if then fiet eval, execfaire avec -Djava.somethingquand appelé.



1

J'ai trouvé une solution différente et facile, appelée UnixUtil .

Téléchargez et décompressez-le sur le lecteur C :. Définissez la variable d'environnement pathà inclure C:\UnixUtils\usr\local\wbin.

C'est important. NE PAS définir le chemin d'accès àC:\UnixUtils\bin


1

Pour être complet, je souhaite mentionner une nouvelle fonctionnalité «Windows Subsystem for Linux» pour Windows 10. Les détails sont décrits dans http://www.howtogeek.com/249966/how-to-install-and-use-the-linux- bash-shell-on-windows-10 /

Notez qu'il est nécessaire d'activer le commutateur “Developer Mode” et d'activer l'option “Windows Subsystem for Linux (Beta)”.

Pour ma part, j’ai trouvé que l’installation de Git pour Windows (que j’utilise de toute façon) est suffisante.


1

Ceci est un vieux fil de discussion, mais pour ceux qui exécutent Windows 10. Il suffit d'ouvrir les fonctionnalités Windows à partir du panneau de configuration "Activer ou désactiver les fonctionnalités Windows".

Choisissez la fonctionnalité 'Windows Subsystem for Linux'. Après l’installation, vous avez «Bash» et vous pouvez même configurer des serveurs Linux natifs dans bash. Et bien sûr, la commande sh, au sein de bash, fonctionne également.


0

Il est possible que le problème se trouve réellement dans le fichier name.sh- vous essayez d’utiliser la .commande mais il tente d’exécuter un type de shell (par exemple csh, je pense) dans lequel cette commande n’est pas valide.

Alors: name.shcommencez-vous par le bon #!/bin/sh(si vous essayez réellement de courir sh)?


1
oui, il commence #! / bin / sh cd D: \ Raghu D: winzip32.exe -min -a -r D: \ p c'est le contenu du fichier

0

ok, il y a BEAUCOUP mal avec ça - lâchez le #! / bin / sh et changez l'extension en batte, et cela pourrait fonctionner avec quelques corrections supplémentaires. Ensuite, vous pouvez simplement l'invoquer par son nom de fichier.

La syntaxe d'un script shell Unix et d'un fichier de commandes Windows n'est pas trop similaire. cygwin, ou un tas de déconner avec unxutils pourrait faire quelque chose qui fonctionnerait dans les deux, mais à moins d'être absolument sûr que l'environnement est toujours le même, cela ne vaut pas la peine


drop the #!/bin/sh, and change the extention to bat, and it might work with a few more fixes.Quoi?! Je suppose que vous n’avez jamais essayé cela… Sous Windows, même les fonctionnalités les plus simples de bash ne sont pas prises en charge ou nécessitent une syntaxe longue.
Camilo Martin

Le deuxième paragraphe couvre le fait que ses chances de ne pas fonctionner, sans beaucoup de travail.
Journeyman Geek

Eh bien, vous avez raison.
Camilo Martin

0

Si vous avez une machine Linux à la maison (ou au travail) et que vous êtes connecté au même réseau, et que ce réseau est sécurisé, cela pourrait faire l'affaire:

  1. Créez un partage de dossier sous Windows (assez facile, mais assurez-vous que le réseau est à l'abri des intrus).
  2. Montez-le sous Linux avec mount //WinMachine/Share LinuxFolder(IIRC, et nécessite Samba ).
  3. En utilisant quelque chose comme PuTTY , connectez-vous à distance à cette machine Linux.
  4. Exécutez votre commande dans le dossier monté.

0

Pour exécuter le script shell à partir des fenêtres. Commencez par utiliser la commande: dos2unix, puis utilisez votre commande normale: sh runide.sh

Cela fonctionnera.


Désolé, une légère correction doit être faite. Utilisez la commande: "dos2unix runide.sh" Sortie: dos2unix: conversion du fichier runide.sh au format UNIX, puis utilisez votre commande: "sh runide.sh". Cela exécutera sûrement votre script shell. Heureux apprentissage
Sridhar GV

La question ne concernait pas le format de fichier, mais plutôt le manque de shell dans Windows.
Archemar

0

Bien que les réponses existantes ici étaient correctes au moment, Windows 10 ne comprend maintenant en option une version modifiée d'Ubuntu lancer un shell bash complet .

Une fois rendus exécutables, les scripts peuvent être exécutés de la manière habituelle depuis bash, par exemple:

chmod +x myscript.sh
./myscript.sh

Si vous souhaitez exécuter un script directement à partir de Windows, vous pouvez créer un raccourci dans le même répertoire et définir la «cible» sur quelque chose comme:

C:\Windows\System32\bash.exe -c "./myscript.sh"

Si le chemin de votre script est relatif à l'emplacement du raccourci (comme dans l'exemple ci-dessus), assurez-vous que le champ "Démarrer dans" est également vide.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.