Windows Subsystem for Linux (WSL) позволяет запускать команды Linux и командные оболочки через bash.exe прямо в операционной системе Windows 10. Это удобно, поскольку позволяет скриптам Windows комбинировать инструменты Windows и Linux. Однако, при попытке выполнить Linux-команды из скрипта на R возникли трудности.
Проблема
При попытке выполнить Linux-команды из R-скрипта (R 3.3.1 x64) на Windows 10 с установленным WSL, возникала ошибка со статусом 65535. Примеры команд, которые не работали:
Проблема была связана с версиями Windows 10 Insider Preview. В версиях, начиная с 14951, были внедрены улучшения для взаимодействия между Windows и Linux, что позволило успешно выполнять Linux-команды из R:
system('bash -c "ls /"')
Пример кода
Для демонстрации, как можно использовать Linux-команды из R после обновления системы, приведем пример кода на Object Pascal (Delphi):
procedure TForm1.Button1Click(Sender: TObject);
var
ResultCode: LongInt;
begin
ResultCode := ShellExecute(0, PChar('open'), PChar('c:\windows\system32\bash.exe'),
PChar('-c "ls /mnt/a > /mnt/a/test.txt"'), nil, SW_SHOWNORMAL);
if ResultCode <= 32 then
ShowMessage('Ошибка выполнения команды');
end;
Этот код использует функцию ShellExecute, чтобы запустить команду ls в директории /mnt/a и сохранить результат в файл test.txt.
Альтернативные решения и замечания
Использование CreateProcess вместо ShellExecute может потребовать дополнительной настройки для корректного выполнения bash.exe.
bash.exe остается для обратной совместимости, но рекомендуется использовать wsl.exe, который предоставляет больше возможностей и контроля.
При использовании wsl -u <имя_пользователя> <команда> убедитесь, что команда доступна для выполнения в указанном пользовательском контексте.
Заключение
После обновления операционной системы до соответствующей версии Windows 10 Insider Preview, выполнение Linux-команд через R в WSL становится возможным. Важно следить за обновлениями и рекомендациями разработчиков для использования всех возможностей WSL.
Контекст описания касается решения проблемы выполнения команд Linux через R-скрипты в Windows Subsystem for Linux на Windows 10.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS