Я могу создать символьную ссылку на исполняемый файл Windows в Windows Subsystem для Linux (WSL) ПУТЬ?

У меня есть Studio Android и JDK 8, установленный в Windows, но JDK cli не доступен на моем WSL. Когда я ввожу java или javac, команда не найдена. Я следовал за предложением здесь, и теперь я могу достигнуть команд от WSL путем ввода java.exe и javac.exe, но я не хочу должным быть указывать .exe расширение. Моя идея состоит в том, чтобы добавить символьную ссылку, которая указывает на исполняемые файлы, но не имея необходимость указывать путь к исполняемому файлу (/mnt/c/...) наблюдение, поскольку это было уже сделано в ПУТИ WSL. Таким образом, я могу создать символьную ссылку, которая указывает на местоположение в ПУТИ? Если это не имеет смысла, это - то, что я попробовал:

sudo ln -s -t java.exe java

и я добрался "failed to access 'java.exe': No such file or directory". Все же это точно, чего я хочу достигнуть: символьная ссылка на исполняемый файл в ПУТИ, не указывая фактический путь к исполняемому файлу, потому что ПУТЬ уже имеет это. Если я являюсь сумасшедшим, и это глупо/невозможно/ненужное, можно сказать, что, поскольку ответ и я примем его!:-D

4
задан 4 September 2019 в 21:17

2 ответа

Необходимо снабдить префиксом исполняемый файл его путь. Кроме того, можно изменить Linux PATH переменная среды и добавляет путь Windows (снабженный префиксом /mnt/c/).

От: Windows Subsystem для совместимости Linux с Windows

Вызов двоичных файлов Windows от WSL

Windows Subsystem для Linux может вызвать двоичные файлы Windows непосредственно из командной строки WSL. Приложения работают, этот путь имеют следующие свойства:

  1. Сохраните рабочий каталог как командную строку WSL кроме сценария, объясненного ниже.
  2. Имейте те же права разрешения как процесс bash.exe.
  3. Выполненный как пользователь активных окон.
  4. Появитесь в Windows Task Manager, как будто непосредственно выполняемый от CMD запрашивают.

Пример:

$ /mnt/c/Windows/System32/notepad.exe

В WSL эти исполняемые файлы обрабатываются подобные собственным исполняемым файлам Linux. Это означает добавлять каталоги к пути Linux и передавать по каналу между работами команд как ожидалось. Примеры:

$ export PATH=$PATH:/mnt/c/Windows/System32
$ notepad.exe
$ ipconfig.exe | grep IPv4 | cut -d: -f2
$ ls -la | findstr.exe foo.txt
$ cmd.exe /c dir

Двоичный файл Windows должен включать расширение файла, соответствовать случаю файла и быть исполняемым файлом. Неисполняемые файлы включая сценарии пакетной обработки и команду как dir может быть выполнен с /mnt/c/Windows/System32/cmd.exe /C команда.

Примеры:

$ /mnt/c/Windows/System32/cmd.exe /C dir
$ /mnt/c/Windows/System32/PING.EXE www.microsoft.com

Параметры передаются неизмененному двоичному файлу Windows.

Даже в Linux символьные ссылки содержат путь. Примите, например, это управление:

$ ls -la /bin | grep ^l
(...SNIP...)
lrwxrwxrwx  1 root root      20 Jun 27 09:49 systemd -> /lib/systemd

systemd связан с /lib/systemd/systemd. Так Ваша символьная ссылка:

sudo ln -s -t java.exe java

Я воображаю (потому что я не эксперт по ссылке), должен был бы посмотреть что-то как:

sudo ln -s -t /mnt/c/Windows/Path/To/java.exe java

Использовать alias вместо символьной ссылки

Вместо символьной ссылки я создал бы псевдоним в моем ~/.bashrc зарегистрируйте таким образом:

alias java='/mnt/c/WindowsPathTo/java.exe'

Затем каждый раз, когда Вы вводите java фетиш вводится от Вашего имени. Любые параметры передали, соблюдаются.

4
ответ дан 1 December 2019 в 09:43

Я использую Fish-Shell и обнаружил, что псевдонимы и символические ссылки на самом деле не работают. Я не уверен, что это проблема с рыбой, я скорее подозреваю, что проблема в странном именовании путей Windows.

Мое решение состояло в том, чтобы добавить функцию в fish.config (эквивалент .bashrc)

function npp
    "/mnt/c/Program Files (x86)/Notepad++/notepad++.exe" $argv
end

($argv в fish эквивалентно $* в bash)

Затем я могу вызвать Notepad++ через: npp test.txt

1
ответ дан 17 March 2020 в 08:09

Другие вопросы по тегам:

Похожие вопросы: