it-swarm.com.de

Wie führe ich eine .sh-Datei unter Windows aus?

Wenn ich versuche, eine Datei (name.sh) in der Befehlszeile mit dem Befehl ./name.sh auszuführen, wird der folgende Fehler angezeigt:

"." wird nicht als interne oder externe Befehls-, Betriebs- oder Stapeldatei erkannt

bitte helfen Sie mir beim Ausführen der .sh-Datei

61
sushant

Sie sind auf Windows CMD.EXE (von der Fehlermeldung). Es wird eine andere Syntax zum Ausführen von Befehlen verwendet. Sie müssen sh name.sh verwenden, vorausgesetzt, Sie haben Cygwin oder ähnliches installiert.

Zur Verdeutlichung verfügt Windows nicht über ein integriertes Dienstprogramm zur Unterstützung von SH-Dateien. Um dies auszuführen, müssen Sie ein Drittanbieter-Tool wie Cygwin installieren.

70
Roger Lipscombe

Sie versuchen, einen Linux-Befehl an der Windows-Eingabeaufforderung auszuführen.

Unter Linux ist der Schrägstrich ein Pfadtrenner. Unter Windows ist der umgekehrte Schrägstrich ein Pfadtrennzeichen und der Schrägstrich in der Regel ein Argument.

Aus diesem Grund denkt Windows, dass Sie versuchen, einen Befehl mit dem Namen "." und parst es das Argument "/name.sh". Die korrekte Konvention wäre ".\Name.sh". Außerdem durchsucht Windows automatisch das aktuelle Verzeichnis nach Ihrem Befehl, sodass Sie einfach "name.sh" eingeben können.

Das nächste Problem, mit dem Sie konfrontiert werden, ist, dass Windows nicht weiß, was ein sh-Skript ist. Auch dies ist eine Linux-Sache. Sie können dieses Problem lösen, indem Sie Cygwin installieren, wenn Sie wirklich ein sh-Skript ausführen möchten oder müssen.

Nach einem Ihrer vorherigen Kommentare können Sie das Skript jedoch genauso gut in name.bat umbenennen und die Zeile "#!/Bin/sh" löschen. Jetzt haben Sie eine Batch-Datei, die Windows verstehen sollte. Weitere Informationen zu Batch-Dateien finden Sie hier .

13
Martin Fido

Alternativ können Sie sich auch der dunklen Seite zuwenden und Linux installieren. Von der Eingabeaufforderung:

sh runide.sh

oder

Sudo sh runide.sh

Ihr Programm wird ausgeführt und Sie werden auch ein besseres System haben.

10
steve

Sie versuchen, Ihr Auto mit Orangensaft anstelle von Benzin zu fahren. Windows teilt ähnliche Befehle, die in BAT- oder CMD-Dateien gespeichert sind, mit Unix/Linux/zOS-Unix-Subsystem/* ix-Shell-Skripten, da diese beiden Betriebssystemfamilien einen gemeinsamen Vorfahren der DEC PDP-x-Maschinen haben.

Wenn Sie sofortige Befriedigung wünschen, müssen Sie eine Umgebung installieren, die ein "sh.exe" -Programm oder "csh.exe" - oder "bash.exe" -Programm bereitstellt (tsh.exe jedermann?).

Alternativ können Sie, wenn Sie Unix-Skriptbefehle sehr gut kennen und die Windows-Befehle .cmd und .bat sehr gut kennen, die .sh-Datei in eine .bat- oder .cmd-Datei übersetzen. Trotzdem werden Sie oft auf mehr Programme im Unix-Stil stoßen, die unter Windows keine Entsprechung haben - grep, sed, vi, emacs usw. Daher der Aufruf, CygWin zu installieren (kein Minimalist) - nur um die Shell und Unix zu bekommen Werkzeuge. Legen Sie es für diese besonderen Anlässe auf ein Flash-Laufwerk.

5
J.M.

Jemand sagte etwas über MS-DOS, indem er / für Befehle und \ für Pfade verwendete. Das ist leicht irreführend. Schauen Sie sich mein Beispiel an:

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

Hat keinen Unterschied in der Wirkung. Ja, dies gilt nicht für alle Operationen. Die eigentliche Antwort lautet einfach Nein . Ohne Cygwin oder SSHD ist dies nicht möglich.

Ich weiß es nur, weil ich dumm einen halben Tag damit verbracht habe herauszufinden, was if then fi und eval, exec mit -Djava.something tun, wenn sie aufgerufen werden.

3
grizzleybear123

Beste Lösung meiner Meinung nach:

  • Downloaden und installieren Sie .git für Windows

  • Rechtsklicke auf den Desktop und sage "git bash here"

  • Führen Sie Ihr Skript wie unter Unix aus

  • Erledigt!

Achtung: Viele Befehle funktionieren unter Windows nicht! Trotzdem funktionieren viele grundlegende Dinge.

Wenn Sie dieses Skript regelmäßig benötigen, möchten Sie möglicherweise eine Verknüpfung erstellen (z. B. auf Ihrem Desktop):

  • Erstellen Sie eine Verknüpfung zu mintty.exe auf Ihrem Desktop

  • Eigenschaften bearbeiten der Verknüpfung und Ziel ändern (Pfad beibehalten):

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

3
Heanz

Verwenden Sie Github für Windows. Es enthält alle ausführbaren Dateien der Unix-Umgebung.

https://github-windows.s3.amazonaws.com/GitHubSetup.exe

2
Nederealm

Dies ist ein alter Thread, aber für Benutzer unter Windows 10. Öffnen Sie einfach die Windows-Funktionen über die Systemsteuerung "Windows-Funktionen ein- oder ausschalten".

Wählen Sie die Funktion 'Windows-Subsystem für Linux'. Nach der Installation haben Sie "Bash" und können sogar native Linux-Server in bash konfigurieren. Und natürlich funktioniert auch der Befehl sh innerhalb von bash.

1
Egbert

Der Vollständigkeit halber möchte ich eine neue Funktion „Windows-Subsystem für Linux“ für Windows 10 erwähnen. Die Details sind in http://www.howtogeek.com/249966/how-to-install-and-use-the- beschrieben. Linux-Bash-Shell-on-Windows-10/

Beachten Sie, dass Sie dafür den Schalter „Developer Mode“ aktivieren und die Option „Windows Subsystem for Linux (Beta)“ aktivieren müssen.

Für mich selbst fand ich, dass die Installation von Git für Windows (die ich sowieso benutze) ausreicht.

1

Ich fand eine andere und einfache Lösung mit dem Namen UnixUtil .

Laden Sie es herunter und entpacken Sie es auf Laufwerk C :. Stellen Sie die Umgebungsvariable path so ein, dass sie C:\UnixUtils\usr\local\wbin enthält.

Das ist wichtig. Setzen Sie den Pfad NICHT auf C:\UnixUtils\bin

So führen Sie das Shell-Skript in den Fenstern aus Verwenden Sie zuerst den Befehl: dos2unix, dann können Sie Ihren normalen Befehl verwenden: sh runide.sh

Das wird klappen.

0
Sridhar GV

ok, es ist VIEL falsch daran - lösche das #!/bin/sh und ändere die Erweiterung auf bat, und es könnte mit ein paar weiteren Korrekturen funktionieren. Dann können Sie es auch über den Dateinamen aufrufen.

Die Syntax eines Unix-Shell-Skripts und einer Windows-Batchdatei ist nicht allzu ähnlich. Cygwin oder eine Menge Unxutils könnten etwas bewirken, das in beiden Fällen funktioniert, aber wenn Sie nicht absolut sicher sind, dass die Umgebung immer gleich ist, lohnt es sich nicht, sich Sorgen zu machen

0
Journeyman Geek

Wenn Sie zu Hause (oder bei der Arbeit) eine Linux-Box haben, die an dasselbe Netzwerk angeschlossen ist, und dieses Netzwerk sicher ist, kann dies den Trick bewirken:

  1. Erstellen Sie eine Ordnerfreigabe unter Windows (ziemlich einfach, aber stellen Sie sicher, dass das Netzwerk vor Eindringlingen geschützt ist).
  2. Mounten Sie es unter Linux mit mount //WinMachine/Share LinuxFolder (IIRC und benötigt Samba ).
  3. Melden Sie sich mit etwas wie PuTTY remote bei dieser Linux-Box an.
  4. Führen Sie Ihren Befehl im bereitgestellten Ordner aus.
0
Camilo Martin

Möglicherweise liegt das Problem tatsächlich in der Datei name.sh - Sie versuchen, den Befehl . zu verwenden, aber es wird versucht, eine Art Shell (z. B. csh, glaube ich) auszuführen, in der dies kein gültiger Befehl ist.

Also: Beginnt name.sh mit dem richtigen #!/bin/sh (wenn Sie tatsächlich versuchen, sh auszuführen)?

0
Andrew Jaffe

Obwohl die vorhandenen Antworten zu diesem Zeitpunkt korrekt waren, enthält Windows 10 does jetzt optional eine modifizierte Version von Ubuntu, auf der eine vollständige Bash-Shell ausgeführt wird .

Einmal ausführbar gemacht, können Skripte auf die übliche Weise aus der Bash heraus ausgeführt werden, zB:

chmod +x myscript.sh
./myscript.sh

Wenn Sie ein Skript direkt unter Windows ausführen möchten, können Sie im selben Verzeichnis eine Verknüpfung erstellen und als "Ziel" Folgendes festlegen:

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

Wenn der Pfad Ihres Skripts relativ zur Position der Verknüpfung ist (wie im obigen Beispiel), stellen Sie sicher, dass das Feld "Start in" ebenfalls leer ist.

0
Molomby