我正在更新我的 PowerShell 别名以包含 Windows Subsystem for Linux 中的实用程序。例如,我想从 PowerShell 启动 vim。
Set-Alias -name 'vim' -Value 'Start-Vim'
function Start-Vim {
wsl vim $args
}
如果我传递一个简单的文件名(例如vim note.txt
),这个别名会很好用,但是如果我传递一个绝对文件路径、一个锚定的相对路径.\
或一个没有锚定的相对路径,它就会失败。
我尝试使用 Resolve-Path 至少到达一个位置(完全解析的路径),但仍然不起作用。它启动 vim,但将该路径作为新文件("C:\temp\APIM Swap.ps1" [New File]
在状态行中)。
我开始尝试替换字符串(\
用替换/
),但这只能解决没有锚点的相对路径,而字符串操作似乎不是正确的解决方案。此外,驱动器号映射到 Linux 中的 mnts,所以我需要处理这个问题。
有没有办法将 Windows 中的文件路径转换为 Windows Subsystem for Linux 中的文件路径?或者还有其他方法可以集成 WSL 实用程序?
答案1
我可以使用 Windows 10 Home 177763 和 Alpine WSL 来使用以下内容。
Set-Alias -name 'vi' -Value 'Start-Vi'
function Start-Vi {
wsl vi (Resolve-Path -Relative $args)
}
请注意,如果您没有为该函数提供参数,或者您的路径比工作目录更深,则这将会失败。
* 更新 *
好吧,我去查看了 wslpath,这是一个修补到 wsl 中的 Linux 命令。现在你可以这样做 -
Set-Alias -name 'wslpath' -Value 'Get-WSLPath'
function Get-WSLPath {
$strlit='"'
wsl wslpath $strlit$args$strlit
}
Set-Alias -name 'nano' -Value 'Start-Nano'
function Start-Nano {
wsl nano $args
}
它允许你运行下面这段丑陋的代码
nano (wslpath .\.ssh\known_hosts)
它现在适用于任何相对路径,但如果没有参数,就会失败。
*再次更新*
当然,大部分都是完全没有必要的,因为你只需使用:
Set-Alias -name 'vi' -Value 'Start-Vi'
function Start-Vi {
wsl vi (wsl wslpath "'$args'")
}