Я обновляю свои псевдонимы PowerShell, чтобы включить в них утилиты из подсистемы Windows для Linux. Например, я хочу запустить vim из PowerShell.
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]
в строке состояния).
Я пошел по пути замены струн (заменить \
с участием /
), но это решает только относительный путь без привязки, и манипуляции со строками не кажутся правильным решением. Кроме того, буквы дисков сопоставляются с mnts в Linux, поэтому мне нужно с этим разобраться.
Есть ли способ преобразовать путь к файлу в Windows в путь к файлу в подсистеме Windows для Linux? Или есть другой способ интеграции утилит WSL?
Я могу использовать следующее, используя Windows 10 Home 177763 и Alpine WSL.
Set-Alias -name 'vi' -Value 'Start-Vi'
function Start-Vi {
wsl vi (Resolve-Path -Relative $args)
}
Обратите внимание, что это произойдет, если вы не предоставите аргумент для функции или если ваш путь глубже, чем рабочий каталог.
* ОБНОВИТЬ *
Итак, я пошел и взглянул на wslpath, команду Linux, пропатченную в wsl. Теперь ты можешь это сделать -
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'")
}