繁体   English   中英

如何为Windows子系统Linux转换Windows路径

[英]How to translate a Windows path for Windows Subsystem for Linux

我正在寻找一种方法将Win32路径转换为POSIX路径,最好使用Win32工具。

背景

最新的Windows 10 Insider Build引入了Linux子系统Linux(WSL),包括由Ubuntu背后的公司Canonical提供的本地bash 他们对bash的实现是在Windows上Ubuntu上相当复杂的Bash名称,我将在下面将其称为bash.exe

相当于访问bash.exe的Windows路径C:\\Users\\me\\Desktop/mnt/c/Users/me/Desktop

我正在尝试从Windows命令提示符传递路径到bash.exe (例如bash -c ls /mnt/me/Desktop )。 因为这需要我传递一个POSIX路径,我想知道Microsoft是否提供了任何工具来将Win32路径以编程方式转换为POSIX路径(就像Cygwin中的cygpath一样)。

除非Windows附带任何翻译工具,否则我可以选择使用Node或Python来确定路径。

我在[0]写了一个小shell脚本,这是一个开始,我希望随着时间的推移而改进。 我猜“sed”是做一些字符串替换的好工具。

这里的当前状态:

linuxify() {
    windowspath=$1
    temppath="$(echo $windowspath | sed -E 's/([A-Z]):/\/mnt\/\L\1/g')"  # C: -> /mnt/c, E: -> /mnt/e
    temppath="$(echo $temppath | sed 's/\\/\//g')"  # backslash -> forward slash
    linuxpath=$temppath
    echo $linuxpath
}

然后你可以像这样使用它

cd "`linuxify "E:\Marvin Kastner\Documents\Uni\Master\gitrepos\masterarbeit_neu"`"

[0] https://gist.github.com/1kastner/723a52f352c3eead42988c26b4ade5d0

事实证明,NodeJS有一个内置模块用于这种东西,称为path 虽然它没有完全解决手头的问题,但它是一个有效的解决方法(对我来说)。 require("path")并决定块或一个班轮。

这是块:

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

作为一个班轮:

var p = require("path")
var d = "/mnt/" + p.posix.join.apply(p.posix, [].concat(["C:\\Users\\me\\Desktop".split(p.win32.sep)[0].toLowerCase()], "F:\\Users\\me\\Desktop".split(p.win32.sep).slice(1))).replace(":", "")

Windows子系统中Ubuntu位置的路径位于:

C:\Users\<user>\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM