簡體   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