Ответ 1
Нативное решение
Официальное решение, предоставленное Обновление предварительного просмотра Windows 10 (14951), основано на почти забытом binfmt_msc Линукс для запуска двоичных файлов. Команда регистрации для binfmt_misc будет такой (где /init
является предварительным интерпретатором binfmt_misc "для win-executables):
sudo echo ":WSLInterop:M::MZ::/init:" > /proc/sys/fs/binfmt_misc/register
И тогда win-executable будет запущен как обычные программы:
$ 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 (DrvFs), а не в файловой системе Linux (VolFs), чтобы наследовать надлежащий рабочий каталог Windows.
Альтернатива cbwin
Пока вы не получите последнюю сборку, проект cbwin предлагает обходное решение, установив 3 новые команды linux внутри WSL:
-
wcmd
: вызовите win-executable черезcmd.exe
. -
wrun
: синхронно вызовите win-исполняемый файл сCreateProcess
и подождите, чтобы умереть (не используяcmd.exe
). -
wstart
: запустить отдельную (асинхронную) команду (с использованиемcmd.exe
).
Чтобы использовать их, вы должны:
- Установить cbwin:
- в вашей обычной файловой системе Windows (где-то в вашем
%PATH%
) будет установлен новыйoutbash.exe
, плюс - 3 linux-команды в файловой системе WSL.
- в вашей обычной файловой системе Windows (где-то в вашем
- Используйте этот
outbash.exe
(где бы вы его не установили), чтобы запустить WSL, NOTC:\Windows\System32\bash.exe
! - Префикс любых win-исполняемых файлов с одной из этих команд, например.
wrun notepad
.
Совет. Если исполняемый файл, запущенный с помощью wcmd
или wrun
, порождает всех детей, они сохраняются только до тех пор, пока исполняемый файл не останется в живых.
notepad.exe
с помощью wcmd
не будет работать, потому что блокнот будет убит сразу после его запуска. Используйте wrun
(синхронно) или wstart
(асинхронно) в этом случай.