2

Для тех, кто не знаком с msys2, это порт * nix программ для Windows. Там я мог бы сделать что-то вроде:

$ some-prog ~/.profile
$ some-prog /c/Windows/System32/drivers/etc/hosts

some-prog может быть любым двоичным файлом, независимо от того, были ли они обычными программами Windows или программами, скомпилированными компиляторами в msys2. Пути были бы прозрачно переведены, таким образом, создавая ощущение * nix-ish, даже при работе с программами, не являющимися частью msys2.

В настоящее время я проверяю WSL/"Bash на Windows" (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

И он открывает C:\home\<wsl_username>\.profile В Sublime Text, тогда как фактический файл должен быть %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 , что снова является неправильным путем.

Есть ли способ, которым я могу иметь правильную, похожую на msys2 интеграцию пути на WSL?

1 ответ1

1

Вам нужно что-то вроде cygpath от Cygwin, к сожалению, пока нет этого порта для WSL ... Тогда вы можете просто запустить:

cd /
notepad.exe $(cygpath /etc/hosts)

На данный момент ближайший заменитель cygpath на данный момент - небольшая программа на redit, которая называется win2lin.exe.

Для другой ссылки вы можете увидеть скрипт оболочки, который Atom (текстовый редактор) только что включил в свою новейшую версию atom.sh.

Или, если вы хотите использовать 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, чтобы сохранить ваш путь чистым), а затем перейдите в /mnt /c /PathToFileYouWantToEdit, затем запустите вашу программу как: atom.exe myExampleFile .

cd /mnt/c/Some/Path
notepad.exe SomeFile

Если ваша цель состоит в том, чтобы редактировать файлы, которые находятся внутри WSL, но недоступны извне (все, что находится вне WSL /mnt), то самый простой способ - установить сервер WebDAV внутри WSL, обеспечивающий прямой доступ к /, и сопоставить этот сервер WebDAV с буква Windows.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .