在ubuntu命令行中,在Win10 WSL中的文件管理器中打开一个文件夹?

在Ubuntu我经常这样做

nautilus . 

在GUI中打开当前文件夹。
我如何在Win10 WSL中执行此操作? 你甚至可以从WSL命令行启动窗口应用程序吗?

在此引用WSL FAQ :

(WSL)主要是开发人员的工具 – 尤其是Web开发人员以及在开源项目上工作或使用开源项目的人员。 这允许那些想要/需要使用Bash,常用Linux工具(sed,awk等)和许多Linux优先工具(Ruby,Python等)的人在Windows上使用他们的工具链。

WSL是一个旨在使需要它们的用户能够在Windows上运行Bash和核心Linux命令行工具的工具。
WSL的目标不是支持GUI桌面或应用程序(例如Gnome,KDE等)

我非常怀疑Windows允许你从WSL打开任何GUI程序, 你想要的是Windows Powershell的一个function,请参阅此介绍 :

我们可以使用命令Explorer在PowerShell中调用Explorer。

在当前目录中打开资源管理器的命令是: explorer .

跑鹦鹉螺

你可以从WSL运行nautilus ! 这将让您管理Linux文件系统。

这对于这个SE来说并不完全合适,因为它主要是与窗口相关的问题,但在这里它是。

只要您拥有基于Windows的X11服务器,Nautilus和许多其他Linux应用程序就可以在WSL上运行。 X11是Linux所依赖的大多数窗口系统,但它也可以安装在Windows上。 X11以客户端 – 服务器模式运行,将调用客户端代码与服务器分离,因此WSL的调用非常透明。

您可以使用X11服务器运行的其他内容包括:

  • 升华
  • 各种终端仿真器
  • 计算器
  • 可能还有其他我没试过的事情。

获取X11服务器

有一些基于Windows的X11服务器。 请注意,服务器使用TCP工作,默认情况下,它可以接受来自任何IP的连接,因此您可能希望在防火墙中对其进行限制。

我用这个:

https://sourceforge.net/projects/vcxsrv/

将WSL连接到它

把它放在.bashrc / .zshrc文件中:

 export DISPLAY=localhost:0.0 

跑nautlius

不要忘记sudo apt update 。 然后sudo apt install nautilus 。 然后

 nautilus . 

运行explorer.exe

您可以从WSL调用任何Windows可执行文件,包括Windows文件管理器explorer.exe 。 您只需要输入其全名(包括扩展名),如果它是Win32可执行文件,它将启动。

但是,Windows应用程序在Windows下运行,而不是在WSL下运行。 他们不会看到Linux文件系统,只看到Windows文件系统。 虽然Linux文件系统确实映射到Windows文件系统中的文件和文件夹,但这种映射或多或少是一个实现细节。 不建议从Windows修改Linux文件系统。

您提供explorer.exe参数,但请注意,您不能为其提供Linux路径,因为它不是Linux应用程序。

没有命令将Linux路径映射到相应的Windows路径,并且路径通常非常难看。 例如, ~/.zshrc的路径可能是:

 C:\Users\[WINDOWS USERNAME]\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\[LINUX USERNAME]\.zshrc 

要在当前工作目录$PWD打开资源管理器并在所有类型的路径(Windows样式和Linux样式)中工作,请执行以下操作( 从我的答案复制到我在SU上的问题 ):

(我在那里面临的挑战是如何在当前工作目录中使用Linux样式路径打开资源管理器以进行查看,如果您要进行修改或执行除查看以外的其他操作,请自行承担风险,请同时阅读Do不使用Windows应用程序和工具更改Linux文件 ):

 explorer.exe "C:\Users\userName\AppData\Local\Lxss$(sed 's:/:\\:g' <<<"$PWD")" 

这将完全在您的工作目录中打开资源管理器。 您唯一需要的是现在定义一个函数来使其工作。 您可以将其添加到.bashrc并将其获取或重新打开Bash。

 xplor(){ explorer.exe "C:\Users\userName\AppData\Local\Lxss$(sed 's:/:\\:g' <<<"$PWD")"; } 

注意 :将userName替换为您的Windows用户帐户名。