У меня есть 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
Необходимо снабдить префиксом исполняемый файл его путь. Кроме того, можно изменить Linux PATH
переменная среды и добавляет путь Windows (снабженный префиксом /mnt/c/
).
От: Windows Subsystem для совместимости Linux с Windows
Вызов двоичных файлов Windows от WSL
Windows Subsystem для Linux может вызвать двоичные файлы Windows непосредственно из командной строки WSL. Приложения работают, этот путь имеют следующие свойства:
- Сохраните рабочий каталог как командную строку WSL кроме сценария, объясненного ниже.
- Имейте те же права разрешения как процесс bash.exe.
- Выполненный как пользователь активных окон.
- Появитесь в 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
фетиш вводится от Вашего имени. Любые параметры передали, соблюдаются.
Я использую 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