11Sep
Im Creators Update ermöglicht die Bash-Shell von Windows 10 jetzt die Ausführung von Windows-Binärdateien und Standardbefehlsbefehlen direkt von Bash aus. Sie können sowohl Linux- als auch Windows-Programme mit derselben Bash-Shell ausführen oder sogar Windows-Befehle in ein Bash-Skript integrieren.
Was Sie über
wissen sollten Hier sind einige grundlegende Details, die Sie über diese Funktion wissen müssen:
- Benutzerkonto : Programme, die von der Bash-Shell gestartet werden, werden so ausgeführt, als wären sie vom aktuellen Windows-Benutzerkonto gestartet worden.
- Berechtigungen : Diese Programme haben die gleichen Berechtigungen wie der Prozess Bash.exe. Wenn diese Befehle Administratorzugriff haben sollen, müssen Sie die Bash-Shell als Administrator ausführen.
- Arbeitsverzeichnis : Windows-Programme teilen sich das gleiche "Arbeitsverzeichnis" wie die Bash-Shell. Wenn Sie also einen Befehl ausführen, der den Inhalt des aktuellen Verzeichnisses auflistet, listet es den Inhalt des aktuellen Arbeitsverzeichnisses in der Bash-Shell auf. Verwenden Sie den Befehl cd, um Arbeitsverzeichnisse zu ändern.
Lassen Sie uns einen Blick darauf werfen, wie man ein Programm ausführt.
So führen Sie ein Windows-Programm aus
Um ein Windows-Programm auszuführen, geben Sie den Pfad zur EXE-Datei des Programms in der Bash-Shell ein. Denken Sie daran, dass Ihr Windows C: Laufwerk bei /mnt/ c in Bash verfügbar ist. In der Bash-Umgebung wird ebenfalls zwischen Groß- und Kleinschreibung unterschieden. Daher müssen Sie die korrekte Großschreibung angeben.
Nehmen wir an, Sie möchten das Ping-Dienstprogramm unter C: \ Windows \ System32 \ PING.EXE starten. Sie würden den folgenden Befehl ausführen:
/mnt/c/Windows/System32/ PING.EXEDer folgende Befehl würde nicht funktionieren, da Bash Groß-und Kleinschreibung beachtet:
/mnt/c/windows/system32/ ping.exeDies ist ein bisschen komplizierter, wenn der Pfad komplexe Zeichen wie Leerzeichen und Klammern enthält,wie die Programme-Ordner. Sie müssen Leerzeichen, Klammern und andere komplexe Zeichen "flüchten", indem Sie ihnen ein "\" -Zeichen voranstellen.
Angenommen, Sie möchten das Internet Explorer-Programm unter C: \ Programme( x86) \ Internet Explorer \ iexplore.exe ausführen. Sie müssten den folgenden Befehl in Bash ausführen:
/mnt/c/ Programm \ Dateien \ \( x86 \) / Internet \ Explorer / iexplore.exeBeachten Sie das "\" vor dem Leerzeichen und Klammer Zeichen. Diese Zeichen müssen "maskiert" sein oder Bash erkennt nicht, dass die Zeichen Teil eines Dateipfads sind.
So übergeben Sie ein Argument an einen Befehl
Die Bash-Shell übergibt Argumente direkt an die von Ihnen ausgeführten Befehle.
Wenn Sie beispielsweise example.com pingen wollten, würden Sie Folgendes ausführen:
/mnt/c/Windows/System32/ PING.EXE example.comOder, wenn Sie die Windows-Hosts-Datei im Editor öffnen wollten, würden Sie Folgendes ausführen:
/mnt/c/Windows/System32/ notepad.exe "C: \ Windows \ System32 \ drivers \ etc \ hosts "Sie verwenden den Standard-Windows-Dateipfad, wenn Sie einen Dateipfad direkt an ein Windows-Programm übergeben. Das liegt daran, dass Bash das Argument direkt weitergibt. Notepad.exe und andere Windows-Programme erwarten einen Windows-Dateipfad.
So führen Sie einen integrierten Befehl aus
Einige Windows-Befehle sind keine. exe-Dateien, sondern sind in die Eingabeaufforderung integriert. Dies schließt beispielsweise den Befehl dir ein, den Sie normalerweise in einer Eingabeaufforderung ausführen. Um einen solchen Befehl auszuführen, müssen Sie die mit der Eingabeaufforderung verknüpfte binary.exe-Binärdatei ausführen und den Befehl als Argument mit / C übergeben, etwa so:
/mnt/c/Windows/System32/ cmd.exe / C-BefehlZum Beispiel, um das Verzeichnis auszuführenBefehl, der in die Eingabeaufforderung integriert ist, führen Sie den folgenden Befehl aus:
/mnt/c/Windows/System32/ cmd.exe / C dirHinzufügen von Verzeichnissen zum Pfad
Die Umgebung von Windows Services für Linux behandelt ausführbare Windows-Dateien ähnlich wie Linux-Binärdateien. Dies bedeutet, dass Sie dem Pfad ein Verzeichnis hinzufügen können, das EXE-Dateien enthält, und diese EXE-Dateien dann direkt ausführen. Um beispielsweise das System32-Verzeichnis zu Ihrem Pfad hinzuzufügen, führen Sie Folgendes aus:
export PATH = $ PATH: /mnt/c/Windows/ System32Sie können dann Windows. exe-Dateien direkt im Ordner System32 ausführen:
PING.exe Beispiel.com notepad.exe cmd.exe / C dirWie die Ausgabe von einem Befehl zu einem anderen
PipeDie Ausgabe eines Windows-Befehls kann an einen Linux-Befehl weitergeleitet werden und umgekehrt. Beispielsweise können Sie den Befehl ipconfig.exe -all verwenden, um Details zu Ihren Netzwerkschnittstellen aufzulisten und sie an den Linux-Befehl grep zu übergeben, um die Ausgabe zu durchsuchen. Um beispielsweise alle Informationen zu Ihrer Verbindung aufzulisten und nach Abschnitten zu suchen, die mit "IPv4-Adresse" übereinstimmen, führen Sie Folgendes aus:
/mnt/c/Windows/System32/ ipconfig.exe -all |grep "IPv4-Adresse"Das ist der grundlegende Prozess. Diese Befehle funktionieren auch, wenn sie in ein Bash-Skript integriert sind. Sie können also ein Bash-Skript schreiben, das sowohl Windows-Befehle als auch Linux-Dienstprogramme enthält. Wenn es in der Bash-Shell ausgeführt wird, funktioniert es in einem Bash-Skript.
Und wenn Sie in die andere Richtung gehen möchten, können Sie den Befehl "bash -c" verwenden, um Bash-Befehle über die Standard-Windows-Eingabeaufforderung auszuführen.