Большинство систем предоставляют open
команду (также известную как start
, cygstart
и xdg-open
т. Д.), Которая открывает файл в приложении «по умолчанию» среды рабочего стола, что бы это ни было.
Например, из Powershell, когда я вхожу:
PS> start form.pdf
Документ открывается в Edge.
Может ли Bash-on-Ubuntu-on-Windows сделать это?
windows-10
windows-subsystem-for-linux
Cheezmeister
источник
источник
... | sed 's/\/mnt\/\(.\)/\1:/1' | xargs cmd.exe /C start
cmd.exe /c start "%localappdata%/lxss/$(readlink -f $some_relative_path)"
Теперь мы готовим на огне!Это зависит от того, хотите ли вы A) запустить программу linux внутри WSL или B) вы хотите запустить программу windows из командной строки bash.
Если Б), то да, если вы устанавливаете Cygwin / Bash. Например, установите Git для Windows, и у вас есть система, работающая под Windows с Bash. Затем вы можете просто запустить start, на самом деле он включен как скрипт:
Если A), то это становится намного сложнее, особенно если вы хотите запустить программу linux для отображения .pdf в окне GUI. Обратите внимание, что Windows знает, как связать приложение по умолчанию для открытия PDF-файла, но WSL не имеет этой информации. Поэтому, даже если у вас есть рабочий стол, работающий под WSL, вам нужно будет связать приложение Linux с графическим интерфейсом, чтобы открыть PDF-файл.
Обратите внимание, что в WSL вы выполняете исполняемые файлы Linux, а не Windows:
источник
Как отметил Мартин, это правильный способ запуска / открытия приложения / файла Windows.
Я нашел очень полезным преобразовать это в скрипт bash, который я храню в папке, которая находится в моем системном пути. Я называю это
start
и делаюchmod 0744
с файлом, чтобы сделать его исполняемым. В$*
означает , что он будет проходить все аргументы командной строки , которую вы предоставили в скриптcmd.exe
.С помощью этой команды в моем системном пути я могу использовать такие команды в Linux, которые открываются в Windows:
start FileXYZ.pdf
// Открывает PDF в программе просмотра PDF, назначенной по умолчанию в Windowsstart explorer .
// Открывает текущую папку WSL в проводнике Windowsstart MyApp.exe
// Запускает приложение Windowsисточник
a\ whitespace.pdf
. Запуск вашего скрипта вродеstart.sh a\ a.pdf b\ b.pdf
бы не сработал.explorer.exe .
открывает текущий путь в проводнике Windowseopen
может открывать различные файлы (каталоги и URI) в WSL.https://github.com/ko1nksm/eopen-ecd
Примеры
источник
Это работало намного лучше для меня:
источник
Вы можете вызвать
Start-Process
команду powershell из WSL:powershell.exe -Command Start-Process file
Чтобы это также работало с абсолютными путями, вы можете использовать
wslpath -wa
команду для перевода пути в путь Windows.powershell.exe -Command Start-Process `wslpath -wa /absolute/path/to/file`
Это имеет преимущество перед
cmd.exe
решением: для смонтированных сетевых ресурсовwslpath
создается UNC-путь, подобный\\server\share\
. Эти UNC-пути не могут быть обработаныcmd.exe
.источник
Я обнаружил, что explorer.exe очень хорошо работает для поиска правильного разрешенного пути (даже для подключенных сетевых каталогов) и запуска инструмента по умолчанию. Единственный недостаток в том, что у вас не может быть путей в имени файла, поэтому вам нужно создать небольшую вспомогательную функцию / скрипт для корректного запуска проводника, например:
Обновление: Ngo указал на другой скрипт,
wslpath
который выполняет преобразование пути, поэтому вы можете вызывать explorer.exe непосредственно по пути (после преобразования). Тогда вышеприведенная функция становится тривиальной и легко может быть сделана псевдонимом.источник
Попробуйте использовать
wsl-open
. Он открывает файлы со стандартным windows-приложением и может быть загружен здесь: https://github.com/4U6U57/wsl-open .источник