如何在 Linux (WSL) 的 Windows 子系统下通过 bash 从 R 执行 linux 命令?

How to execute linux commands from R via bash under the Windows Subsystem for Linux (WSL)?

Windows 10 上的 WSL 允许通过 bash.exe 执行 Linux 命令和命令行工具。非常有用的是,可以从 Windows 命令行 (cmd.exe) 调用 Linux tool/command,方法是将其作为参数传递给 bash.exe,如下所示:

bash.exe -c <linux command>

这非常有用,因为它应该允许基于 Windows 的脚本无缝地结合 Windows 和 Linux 工具。

不幸的是,我未能从 R 脚本调用 Linux 命令(见下文)。

0) 系统

Win10 x64 + 周年更新 + 安装 WSL

1) 调用Linux命令的比较案例

以下都适合我;此处仅显示了对 ls.

的示例调用

2) 无法从 R 调用 Linux 命令 使用 R 3.3.1 x64

以下所有操作(以及我尝试过的几个类似操作)均失败,状态为 65535:

shell('c:/windows/system32/bash.exe -c "ls /mnt/a"', shell="cmd.exe", flag = "/c")

shell("ls", shell="c:/windows/system32/bash.exe", flag = "-c")

system('cmd /c c:/windows/system32/bash.exe -c "ls /mnt/a > /mnt/a/test.txt"')

system('bash -c "ls /mnt/a"')

system('c:/windows/system32/bash.exe -c "ls /mnt/a > /mnt/a/test.txt"')

3) 问题

考虑到 1) 下的示例有效,我发现 2) 非常令人费解。我在这里遗漏了什么明显的东西吗?

我将非常感谢一个简单的示例,其中 运行 通过 bash.exe 在 WSL 下运行的 Linux 命令。

您的失败示例现在应该可以在 Windows 10 Insider builds >= 14951 which introduced many "interop" improvements and new capabilities:

中正常工作
> system('bash -c "ls /"')

生成:

bin   cache  dev  home  lib    media  opt   root  sbin  srv  tmp  var
boot  data   etc  init  lib64  mnt    proc  run   snap  sys  usr