Większość systemów zapewnienia open
polecenia (na przemian znany jako start
, cygstart
, xdg-open
itd.), Który otwiera plik w „default” aplikacji środowiska graficznego użytkownika, cokolwiek to znaczy.
Na przykład z Powershell, gdy wprowadzam:
PS> start form.pdf
Dokument otworzy się w Edge.
Czy Bash-on-Ubuntu-on-Windows może to zrobić?
windows-10
windows-subsystem-for-linux
Cheezmeister
źródło
źródło
... | sed 's/\/mnt\/\(.\)/\1:/1' | xargs cmd.exe /C start
cmd.exe /c start "%localappdata%/lxss/$(readlink -f $some_relative_path)"
Teraz gotujemy z ogniem!Zależy to od tego, czy chcesz A) uruchomić program Linux w WSL, czy B) chcesz uruchomić program Windows z wiersza poleceń powłoki bash.
Jeśli B), to tak, jeśli zainstalujesz cygwin / bash. Na przykład zainstaluj git dla Windows i masz system działający pod Windows z bash. Następnie możesz po prostu uruchomić start, w rzeczywistości jest on zawarty jako skrypt:
Jeśli A), to staje się znacznie trudniejsze, szczególnie jeśli chcesz uruchomić program Linux, aby wyświetlić plik .pdf w oknie GUI. Zauważ, że Windows wie, że może skojarzyć domyślną aplikację do otwierania pliku pdf, ale WSL nie ma tych informacji. Więc nawet jeśli masz pulpit działający pod WSL , musisz powiązać aplikację GUI z Linuksem, aby otworzyć pdf.
Uwaga, aby wyjaśnić, w WSL wykonujesz pliki wykonywalne Linuksa, a nie pliki wykonywalne systemu Windows:
źródło
Jak zauważył Martijn, jest to właściwy sposób na uruchomienie / otwarcie aplikacji / pliku Windows.
Przekonałem się, że bardzo przydatne jest przekształcenie tego w skrypt bash, który trzymam w folderze, który znajduje się w mojej ścieżce systemowej. Nazywam go
start
i robięchmod 0744
z plikiem, aby był wykonywalny. Te$*
środki to przejdzie wszystkie argumenty wiersza poleceń ty dostarczonych do skryptucmd.exe
.Za pomocą tego polecenia w ścieżce systemowej mogę wykonywać takie polecenia w systemie Linux, które otwierają się w systemie Windows:
start FileXYZ.pdf
// Otwiera plik PDF w domyślnie przypisanej przeglądarce plików PDF w systemie Windowsstart explorer .
// Otwiera bieżący folder WSL w Eksploratorze Windowsstart MyApp.exe
// Uruchamia aplikację Windowsźródło
a\ whitespace.pdf
. Uruchomienie skryptu tak jakstart.sh a\ a.pdf b\ b.pdf
by nie działało.explorer.exe .
otwiera bieżącą ścieżkę w Eksploratorze Windowseopen
może otwierać różne pliki (, katalogi i URI) w WSL.https://github.com/ko1nksm/eopen-ecd
Przykłady
źródło
To działało dla mnie znacznie lepiej:
źródło
Możesz wywołać
Start-Process
polecenie powershell z poziomu WSL:powershell.exe -Command Start-Process file
Aby działało to również ze ścieżkami bezwzględnymi, możesz użyć
wslpath -wa
polecenia, aby przetłumaczyć ścieżkę na ścieżkę systemu Windows.powershell.exe -Command Start-Process `wslpath -wa /absolute/path/to/file`
Ma to przewagę nad
cmd.exe
rozwiązaniem: dla zamontowanych udziałów sieciowychwslpath
tworzy ścieżkę UNC jak\\server\share\
. Te ścieżki UNC nie mogą być obsługiwanecmd.exe
.źródło
Przekonałem się, że explorer.exe działa całkiem dobrze w znalezieniu poprawnej ścieżki (nawet w zamontowanych katalogach sieciowych) i uruchomieniu domyślnego narzędzia. Jedną z nich jest to, że nie możesz mieć ścieżek w nazwie pliku, więc musisz utworzyć małą funkcję pomocniczą / skrypt, aby poprawnie uruchomić eksploratora, np .:
Aktualizacja: Ngo wskazał inny skrypt,
wslpath
który dokonuje konwersji ścieżki, więc możesz wywołać explorer.exe bezpośrednio na ścieżce (po konwersji). Następnie powyższa funkcja staje się banalna i można ją łatwo zmienić na alias.źródło
Spróbuj użyć
wsl-open
. Otwiera pliki w standardowej aplikacji dla systemu Windows i można je pobrać tutaj: https://github.com/4U6U57/wsl-open .źródło
aby rozwinąć odpowiedź Martijna, możesz umieścić
w .bashrc, aby uzyskać oczekiwane zachowanie systemu Windows, np.
start .
otwiera eksploratora w bieżącym reż.źródło