Die meisten Systeme bieten einen open
Befehl (abwechselnd bekannt als start
, cygstart
, xdg-open
etc.) , die eine Datei in der „default“ Anwendung Desktop - Umgebung öffnet, was auch immer das ist.
Zum Beispiel von Powershell, wenn ich eintrete:
PS> start form.pdf
Das Dokument wird in Edge geöffnet.
Kann Bash-on-Ubuntu-on-Windows dies tun?
windows-10
windows-subsystem-for-linux
Cheezmeister
quelle
quelle
... | sed 's/\/mnt\/\(.\)/\1:/1' | xargs cmd.exe /C start
cmd.exe /c start "%localappdata%/lxss/$(readlink -f $some_relative_path)"
Jetzt kochen wir mit Feuer!Dies hängt davon ab, ob Sie A) ein Linux-Programm innerhalb der WSL starten oder B) ein Windows-Programm über eine Bash-Shell-Eingabeaufforderung starten möchten.
Wenn B) dann ja, wenn Sie cygwin / bash installieren. Wenn Sie beispielsweise git für Windows installieren, wird unter Windows ein System mit bash ausgeführt. Dann können Sie einfach start ausführen, tatsächlich ist es als Skript enthalten:
Wenn A), wird es viel schwieriger, insbesondere wenn Sie ein Linux-Programm starten möchten, um eine PDF-Datei in einem GUI-Fenster anzuzeigen. Beachten Sie, dass Windows eine Standardanwendung zum Öffnen einer PDF-Datei zuordnen kann, die WSL jedoch nicht über die Informationen verfügt. Selbst wenn Sie einen Desktop unter WSL zum Laufen bringen würden, müssten Sie eine Linux-GUI-App zuordnen, um das PDF zu öffnen.
Hinweis zur Verdeutlichung: Innerhalb der WSL führen Sie ausführbare Linux-Dateien und keine ausführbaren Windows-Dateien aus:
quelle
Wie Martijn feststellte, ist dies der richtige Weg, um eine Windows-Anwendung / -Datei auszuführen / zu öffnen.
Ich fand es sehr nützlich, dies in ein Bash-Skript zu integrieren, das ich in einem Ordner in meinem Systempfad aufbewahre. Ich benenne es
start
und machechmod 0744
mit der Datei, um sie ausführbar zu machen. Dies$*
bedeutet, dass alle Befehlszeilenargumente, die Sie an das Skript übergeben haben, an übergeben werdencmd.exe
.Mit diesem Befehl in meinem Systempfad kann ich unter Linux folgende Befehle ausführen, die unter Windows geöffnet werden:
start FileXYZ.pdf
// Öffnet die PDF-Datei im standardmäßig zugewiesenen PDF-Viewer unter Windowsstart explorer .
// Öffnet den aktuellen WSL-Ordner im Windows Explorerstart MyApp.exe
// Startet die Windows-Anwendungquelle
a\ whitespace.pdf
. Das Starten Ihres Skriptsstart.sh a\ a.pdf b\ b.pdf
würde nicht funktionieren.explorer.exe .
öffnet den aktuellen Pfad im Windows Explorereopen
kann verschiedene Dateien (, Verzeichnisse und URI) innerhalb der WSL öffnen.https://github.com/ko1nksm/eopen-ecd
Beispiele
quelle
Das hat bei mir viel besser funktioniert:
quelle
Sie können den
Start-Process
Befehl von Powershell innerhalb der WSL aufrufen :powershell.exe -Command Start-Process file
Damit dies auch mit absoluten Pfaden funktioniert, können Sie
wslpath -wa
den Pfad mit dem Befehl in einen Windows-Pfad übersetzen.powershell.exe -Command Start-Process `wslpath -wa /absolute/path/to/file`
Dies hat einen Vorteil gegenüber der
cmd.exe
Lösung:wslpath
Erzeugt für gemountete Netzwerkfreigaben einen UNC-Pfad wie\\server\share\
. Diese UNC-Pfade können nicht von verarbeitet werdencmd.exe
.quelle
Ich habe festgestellt, dass explorer.exe ziemlich gut funktioniert, um den richtigen aufgelösten Pfad (auch für gemountete Netzwerkverzeichnisse) zu finden und das Standardtool zu starten. Das einzige Problem ist, dass der Dateiname keine Pfade enthalten kann. Sie müssen daher eine kleine Hilfsfunktion / ein Skript erstellen, um den Explorer korrekt zu starten, z.
Update: Ngo hat auf ein anderes Skript hingewiesen
wslpath
, das die Pfadkonvertierung durchführt, sodass Sie explorer.exe direkt auf dem Pfad aufrufen können (nach der Konvertierung). Dann wird die obige Funktion trivial und kann leicht zu einem Alias gemacht werden.quelle
Versuchen Sie es mit
wsl-open
. Es öffnet Dateien mit ihrer Standard-Windows-Anwendung und kann hier heruntergeladen werden: https://github.com/4U6U57/wsl-open .quelle