对于那些不熟悉系统管理软件,它是 *nix 程序到 Windows 的移植。在那里,我可以做如下事情:
$ some-prog ~/.profile
$ some-prog /c/Windows/System32/drivers/etc/hosts
some-prog
可以是任何二进制文件,无论它们是一般的 Windows 程序还是使用 msys2 中的编译器编译的程序。路径将被透明地转换,因此即使在使用不属于 msys2 的程序时也能给人一种非常 *nix 的感觉。
目前,我正在检查 WSL/“Windows 上的 Bash”(Creators Update),但似乎遇到了一个问题。
对于 Linux 程序来说,一切正常:
~ $ nano ~/.
正如预期的那样,nano 打开时显示的是 的内容~/.profile
。
但是,当尝试调用 Windows 程序时,出现错误:
~ $ "/mnt/c/Program Files/Sublime Text 3/subl.exe" ~/.profile
Unable to translate current working directory. Using C:\Users\Admin
它在 Sublime Text 中打开C:\home\<wsl_username>\.profile
,而实际文件应该是%localappdata%\lxss\home\<wsl_username>\.profile
。
Windows 路径也不太好:
~ $ "/mnt/c/Program Files/Sublime Text 3/subl.exe" /mnt/c/Windows/System32/drivers/etc/hosts
Unable to translate current working directory. Using C:\Users\Admin
这又打开了C:\mnt\c\Windows\System32\drivers\etc\hosts
一条错误的道路。
有没有办法可以在 WSL 上实现正确的、类似 msys2 的路径集成?
答案1
你需要一些类似cygpath
Cygwin 的东西,不幸的是,目前还没有将其移植到 WSL...然后你就可以运行:
cd /
notepad.exe $(cygpath /etc/hosts)
目前,最接近的替代品cygpath
是在 redit 上发布的小程序,名为执行程序。
作为另一个参考,您可以看到 Atom(文本编辑器)在其最新版本中包含的 shell 脚本,原子脚本。
或者如果你想使用 nodejs并且不介意对你的用户名进行硬编码,你可以写:
var p = require("path")
var path = "C:\\Users\\me\\Desktop"
var sepa = path.split(p.win32.sep)
var newS = [].concat([sepa[0].toLowerCase()], sepa.slice(1))
var newP = "/mnt/" + p.posix.join.apply(p.posix, newS).replace(":", "")
// newP == "/mnt/c/Users/me/Desktop
目前,最简单的解决方法是确保您要使用的 Windows 二进制文件在您的路径中(您甚至可以使用 .exe 的符号链接来保持路径清洁),然后 cd 到 /mnt/c/PathToFileYouWantToEdit,然后像这样运行您的程序:atom.exe myExampleFile
。
cd /mnt/c/Some/Path
notepad.exe SomeFile
如果您的目标是编辑 WSL 内部但外部无法访问的文件(WSL 的 /mnt 之外的所有内容),那么最简单的方法是在 WSL 内部安装一个 WebDAV 服务器,允许对 / 进行读/写访问,并将该 WebDAV 服务器映射到 Windows 驱动器号。