2010-03-15 07:34:42 +0000 2010-03-15 07:34:42 +0000
68
68

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, erhalte ich die Fehlermeldung, dass:

“.” nicht als interner oder externer Befehl, betriebsfähig oder Batch-Datei erkannt wird

bitte helfen Sie mir, die .sh-Datei auszuführen

Antworten (15)

76
76
76
2010-03-15 07:58:46 +0000

Sie befinden sich auf Windows CMD.EXE (aus der Fehlermeldung). Es verwendet eine andere Syntax, um Befehle auszuführen. Sie müssen sh name.sh verwenden, vorausgesetzt, dass Sie Cygwin oder ähnliches installiert haben.

Zur Klarstellung: Windows hat kein eingebautes Dienstprogramm zur Unterstützung von .sh-Dateien. Um es auszuführen, müssen Sie ein Programm eines Drittanbieters wie Cygwin installieren.

13
13
13
2010-03-15 13:48:44 +0000

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

Unter Linux ist der Schrägstrich ein Pfadtrenner. Unter Windows ist der umgekehrte Schrägstrich ein Pfadtrennzeichen und der vorwärts gerichtete Schrägstrich deutet im Allgemeinen auf ein Argument hin.

Daher glaubt Windows, dass Sie versuchen, einen Befehl namens “.” auszuführen, und parst ihn mit dem Argument “/name.sh”. Die korrekte Konvention wäre “.\name.sh”. Zusätzlich wird Windows automatisch das aktuelle Verzeichnis nach Ihrem Befehl durchsuchen, so dass Sie einfach “name.sh” eingeben könnten.

Das nächste Problem, auf das Sie stoßen werden, ist, dass Windows nicht weiß, was ein sh-Skript ist, auch dies ist eine Linux-Sache. Sie könnten dies lösen, indem Sie Cygwin installieren, wenn Sie wirklich ein sh-Skript ausführen wollen oder müssen.

Nach einem Ihrer früheren Kommentare zu urteilen, könnten Sie das Skript aber genauso gut in name.bat umbenennen und die Zeile “#!/bin/sh” löschen. Jetzt haben Sie eine Batch-Datei, die Windows verstehen sollte. Sie können mehr über Batch-Dateien lesen hier .

11
11
11
2010-11-18 15:46:30 +0000

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

sh runide.sh

oder

sudo sh runide.sh

Ihr Programm wird laufen und Sie werden auch ein besseres System haben.

9
9
9
2017-04-09 18:58:10 +0000

Meiner Meinung nach beste Lösung:

  • Herunterladen und installieren .git für Windows

  • Rechtsklick auf den Desktop und sagen Sie “git bash here ”

  • Führen Sie Ihr Skript wie in unix aus

  • Fertig!

_Vorsicht: Viele Befehle funktionieren unter Windows nicht! Wenn Sie das Skript regelmäßig benötigen, können Sie eine Verknüpfung erstellen (z.B. auf Ihrem Desktop):

  • Verknüpfung zu mintty.exe auf Ihrem Desktop erstellen

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

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

5
5
5
2011-08-16 22:52:50 +0000

Sie versuchen, Ihr Auto mit Orangensaft statt mit Benzin zu betreiben. Windows teilt sich ä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, die DEC PDP-x-Maschinen, haben.

Wenn Sie eine sofortige Befriedigung wollen, müssen Sie eine Umgebung installieren, die einen “sh. exe”-Programm oder “csh.exe” oder “bash.exe”-Programm (tsh.exe irgendjemand?) zur Verfügung stellt.

Alternativ können Sie, wenn Sie die Unix-Skriptbefehle sehr gut kennen und die .cmd- und .bat-Dateibefehle von Windows sehr gut beherrschen, die .sh-Datei in eine .bat- oder .cmd-Datei übersetzen. Trotzdem werden Sie oft auf 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-Werkzeuge zu bekommen. Legen Sie es auf ein Flash-Laufwerk, für diese besonderen Gelegenheiten.

3
3
3
2012-05-28 23:19:47 +0000

Jemand sagte etwas über MS-DOS, das / für Befehle und Jemand sagte etwas über MS-DOS, das/` für Befehle und für Pfade verwendet. Dies ist leicht irreführend. Sehen Sie sich mein Beispiel an:

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

hat keinen Unterschied in der Wirkung. Ja, es gilt nicht für alle Operationen - die eigentliche Antwort ist einfach Nein, oder ohne Cygwin oder SSHD geht es nicht.

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

2
2
2
2015-07-20 16:24:31 +0000

Verwenden Sie Github für Windows. Es enthält alle ausführbaren Dateien der Unix-Umgebung. https://github-windows.s3.amazonaws.com/GitHubSetup.exe

1
1
1
2014-05-13 22:05:11 +0000

Ich fand eine andere und einfache Lösung namens UnixUtil .

Downloaden und entpacken Sie es auf Laufwerk C:. Setzen Sie die Umgebungsvariable path so, dass sie C:\UnixUtils\usr\local\wbin einschließt.

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

1
1
1
2018-05-01 16:06:51 +0000

Dies ist ein alter Thread, aber für diejenigen, die mit Windows 10 arbeiten. Öffnen Sie einfach Windows-Funktionen über die Systemsteuerung ‘Windows-Funktionen ein- oder ausschalten’

Wählen Sie die Funktion ‘Windows-Subsystem für Linux’. Nach der Installation steht Ihnen die ‘Bash’ zur Verfügung und Sie können sogar native Linux-Server innerhalb der Bash konfigurieren. Und natürlich funktioniert auch der sh-Befehl innerhalb der bash.

1
1
1
2016-12-27 10:39:14 +0000

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

Beachten Sie, daß es die Aktivierung des Schalters “Entwicklermodus” und die Aktivierung der Option “Windows Subsystem für Linux (Beta)” erfordert.

Für mich selbst habe ich festgestellt, daß die Installation von Git für Windows (das ich sowieso benutze) ausreichend ist.

0
0
0
2012-08-31 15:16:38 +0000

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

  1. Erstellen Sie eine Ordnerfreigabe unter Windows (ziemlich einfach, aber stellen Sie sicher, daß das Netzwerk vor Eindringlingen sicher ist):
  2. Mounten Sie ihn unter Linux mit mount //WinMachine/Share LinuxFolder (IIRC, und erfordert Samba ).
  3. Melden Sie sich mit etwas wie PuTTY aus der Ferne an dieser Linux-Box an.
  4. Führen Sie Ihren Befehl im eingehängten Ordner aus.
0
0
0
2010-03-15 13:46:42 +0000

ok, da ist eine LOT falsch - lassen Sie das #!/bin/sh weg, und ändern Sie die Erweiterung in bat, und es könnte mit ein paar weiteren Korrekturen funktionieren. Dann können Sie es auch einfach mit seinem Dateinamen aufrufen.

Die Syntax eines Unix-Shell-Skripts und einer Windows-Batch-Datei sind sich nicht allzu ähnlich. cygwin oder eine Menge Durcheinander mit unxutils könnten etwas ergeben, das in beiden funktioniert, aber wenn Sie nicht ABSOLUT sicher sind, dass die Umgebung immer gleich ist, ist es die Kopfschmerzen nicht wert

0
0
0
2016-08-25 07:34:59 +0000

Obwohl die hier gegebenen Antworten damals korrekt waren, enthält Windows 10 gibt jetzt optional eine modifizierte Version von Ubuntu mit einer vollständigen Bash-Shell .

Einmal ausführbar gemacht, können Skripte auf die übliche Weise innerhalb der Bash ausgeführt werden, z.B.:

chmod +x myscript.sh
./myscript.sh

Wenn Sie ein Skript direkt von Windows aus ausführen wollen, könnten Sie eine Verknüpfung im selben Verzeichnis erstellen und das ‘Ziel’ auf etwas wie:

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

setzen.

0
0
0
2015-11-23 11:57:56 +0000

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

Das wird funktionieren.

0
0
0
2010-03-15 07:55:19 +0000

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

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