Suche nach gleichwertiger wsl.exe-Befehlszeile

Suche nach gleichwertiger wsl.exe-Befehlszeile

Die folgende einzelne Befehlszeile im Zielfeld einer Windows-Desktopverknüpfung pingt eine Adresse an und versieht sie mit einem Zeitstempel.

C:\Windows\System32\bash.exe -c "ping 1.0.0.1 | while read line; do echo `date` - $line; done"

Beispielausgabe:

Fri Nov 27 14:08:05 CST 2020 - PING 1.0.0.1 (1.0.0.1) 56(84) bytes of data.
Fri Nov 27 14:08:05 CST 2020 - 64 bytes from 1.0.0.1: icmp_seq=1 ttl=58 time=26.7 ms
Fri Nov 27 14:08:06 CST 2020 - 64 bytes from 1.0.0.1: icmp_seq=2 ttl=58 time=35.5 ms
Fri Nov 27 14:08:07 CST 2020 - 64 bytes from 1.0.0.1: icmp_seq=3 ttl=58 time=42.0 ms

ich leseHierdass wsl.exe statt bash verwendet werden sollte, aber ich kann nicht herausfinden, wie man den entsprechenden Befehl erstellt.

(Um dies in Windows 10 zu tun, müssen Sie "Windows Subsystem für Linux" in Windows 10 aktivieren und Ubuntu aus dem Microsoft Store installieren.dieser HTG-Artikel.)

Antwort1

Die von Ihnen verlinkte Antwort ist falsch: bash.exeSie ist nicht veraltet und in Ihrem Fall sogar obligatorisch.

Der Grund dafür ist, dass die WSL zwar eine Befehlsparameter, es lässt nur einen einzigen Befehl zu und interpretiert daher die folgende Befehlszeile als einen einzelnen Aufruf, der nicht funktioniert:

Bildbeschreibung hier eingeben

Auch der Versuch, integrierte Shell-Befehle zu verwenden, funktioniert nicht:

Bildbeschreibung hier eingeben

Kurz gesagt, Sie sind gezwungen, den bashBefehl für Ihr Beispiel zu verwenden. Wenn Sie mehr als eine Linux-Distribution in WSL installiert haben, bashwird die Shell der Distribution aufgerufen, die als Standard definiert ist.

Antwort2

ich leseHierdass wsl.exe statt bash verwendet werden sollte, aber ich kann nicht herausfinden, wie man den entsprechenden Befehl erstellt.

Ersetzen Sie einfach bash.exe -cdurch wsl.exe --exec bash -c: 1

C:\Windows\System32\wsl.exe --exec bash -c
 "ping 1.0.0.1 | while read line; do echo `date` - $line; done"

Das funktioniert gut incmd.exe. Ich empfehle, es auszuprobieren! 2

Ausgabebeispiel:

date - PING 1.0.0.1 (1.0.0.1) 56(84) bytes of data.
date - 64 bytes from 1.0.0.1: icmp_seq=1 ttl=56 time=4.58 ms
date - 64 bytes from 1.0.0.1: icmp_seq=2 ttl=56 time=4.31 ms
^C

Ich selbst habe dies erst vor ein paar Tagen erfahren, als ich lasdieser Beitrag.

Sie haben Recht,bash.exeist veraltet (wie wslconfig.exeauch lxrun.exe).

Verweise


1 In wsl.exe --exec bash -cist bashdieLinux Befehl undnicht das Windows bash.exeBefehl.
Dies wird (indirekt) deutlich, wenn Sie versuchen, bashdurch bash.exe – zu ersetzen und feststellen, dass dann keine Ausgabe erfolgt.

2 So öffnen Sie die Befehlszeile (als Administrator): Drücken Sie WinKey+ r, geben Sie ein cmd, halten Sie Ctrl+ gedrückt Shiftund drücken Sie Enter.
(Kopieren Sie den Befehl anschließend mit Ctrl+ c, Ctrl+ v.)

verwandte Informationen