如何使用默认应用程序从 WSL“打开”文件?

Che*_*ter 32 windows-10 windows-subsystem-for-linux

大多数系统都提供了一个open命令(也称为startcygstartxdg-open等),用于在桌面环境的“默认”应用程序中打开一个文件,无论它是什么。

例如,当我输入 Powershell 时:

PS> start form.pdf
Run Code Online (Sandbox Code Playgroud)

文档在 Edge 中弹出。

Bash-on-Ubuntu-on-Windows 可以做到这一点吗?

小智 38

由于 Windows Linux 互操作开始工作,您现在可以调用:

cmd.exe /C start <file>
Run Code Online (Sandbox Code Playgroud)

  • 很好的解决方案。我们还可以使用 https://superuser.com/q/1110974/66714 中的信息访问 Linux 文件系统上的文件。像 `cmd.exe /c start "%localappdata%/lxss/$(readlink -f $some_relative_path)"` 现在我们正在用火做饭! (2认同)

小智 27

WSL 2 最近的回答: Just do wslview slides.pdf.

这是wslu 集合的一部分,并已预安装在我的 Ubuntu 中。不幸的是,文档有点稀疏。

所有的cmd.exe变体都不适合我,因为它不想在像这样的路径内打开\\wsl$\…

  • 很好,`wslview .` 在 Windows 资源管理器中打开当前目录。 (3认同)
  • `别名打开=“wslview”` (2认同)

Myr*_*SC2 7

要扩展 Martijn 的答案,您可以将

alias start='cmd.exe /C start'
Run Code Online (Sandbox Code Playgroud)

在您的 .bashrc 中获得预期的 Windows 行为,例如start .在当前目录中打开资源管理器。


小智 6

这对我来说效果更好:

explorer.exe `wslpath -aw <path>`
Run Code Online (Sandbox Code Playgroud)


pse*_*ant 5

正如 Martijn 所指出的,这是执行/打开 Windows 应用程序/文件的正确方法。

cmd.exe /C start <file>
Run Code Online (Sandbox Code Playgroud)

我发现将它处理到我保存在系统路径中的文件夹中的 bash 脚本中非常有用。我命名它start并对chmod 0744文件执行操作以使其可执行。这$*意味着它将把您提供给脚本的所有命令行参数传递给cmd.exe.

cmd.exe /C start <file>
Run Code Online (Sandbox Code Playgroud)

在我的系统路径中使用此命令,我可以在 Linux 中打开在 Windows 中打开的命令:

  1. start FileXYZ.pdf // 在 Windows 中默认指定的 PDF 查看器中打开 PDF
  2. start explorer . // 在 Windows 资源管理器中打开当前的 WSL 文件夹
  3. start MyApp.exe // 启动 Windows 应用程序

  • 唯一的问题是该解决方案不适用于名称中包含空格的文件。 (2认同)