Antworten:
Sie sind auf Windows CMD.EXE (von der Fehlermeldung). Es wird eine andere Syntax zum Ausführen von Befehlen verwendet. Sie müssen verwenden sh name.sh
, 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 .
Sie versuchen, an der Windows-Eingabeaufforderung einen Linux-Befehl 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, 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 Batchdateien finden Sie hier .
Laden Sie .git für Windows herunter und installieren Sie es
Rechtsklicke auf den Desktop und sage "git bash here"
Führen Sie Ihr Skript wie unter Unix aus
Getan!
Achtung: Viele Befehle funktionieren unter Windows nicht! Trotzdem werden viele grundlegende Dinge funktionieren.
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
Bearbeiten Sie die Eigenschaften der Verknüpfung und ändern Sie das Ziel (behalten Sie den Pfad bei):
C:\Program Files\Git\usr\bin\mintty.exe" -h always /bin/bash -l -e 'D:\folder\script.sh'
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-Shellskripten, 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.
Jemand sagte etwas über MS-DOS, das /
für Befehle und \
für Pfade verwendet. 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 Vorgänge. Die eigentliche Antwort lautet einfach Nein . Ohne Cygwin oder SSHD ist dies nicht möglich.
Ich weiß nur , weil ich dummerweise, um herauszufinden, einen halben Tag damit verbracht , was if then fi
und eval
, exec
tun , -Djava.something
wenn sie aufgerufen.
Verwenden Sie Github für Windows. Es enthält alle ausführbaren Dateien der Unix-Umgebung.
Ich habe eine andere und einfache Lösung gefunden, UnixUtil .
Laden Sie es herunter und entpacken Sie es auf Laufwerk C :. Legen Sie die Umgebungsvariable fest path
, die eingeschlossen werden soll C:\UnixUtils\usr\local\wbin
.
Das ist wichtig. Setzen Sie den Pfad NICHT aufC:\UnixUtils\bin
Der Vollständigkeit halber möchte ich ein neues Feature „Windows-Subsystem für Linux“ für Windows 10 erwähnen. Die Details sind unter http://www.howtogeek.com/249966/how-to-install-and-use-the-linux- beschrieben. 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.
Dies ist ein alter Thread, aber für Benutzer unter Windows 10. Öffnen Sie einfach die Windows-Funktionen über die Systemsteuerung "Windows-Funktionen aktivieren oder deaktivieren".
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.
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: Fängt das name.sh
mit dem richtigen an #!/bin/sh
(wenn du tatsächlich versuchst zu rennen sh
)?
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
drop the #!/bin/sh, and change the extention to bat, and it might work with a few more fixes.
Was?! Ich vermute, Sie haben es noch nie versucht ... Unter Windows werden selbst die einfachsten Bash-Funktionen nicht unterstützt oder erfordern eine lange Syntax.
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:
mount //WinMachine/Share LinuxFolder
Mounten Sie es unter Linux mit (IIRC und erfordert Samba ).So führen Sie das Shell-Skript unter Windows aus Verwenden Sie zuerst den Befehl: dos2unix, dann können Sie Ihren normalen Befehl verwenden: sh runide.sh
Das wird klappen.
Obwohl die bestehenden hier Antworten zu der Zeit richtig, 10 Windows - ist nun auch optional eine modifizierte Version von Ubuntu eines vollständig 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.