You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中调用bash,在Ubuntu虚拟机其他目录执行make命令

Ubuntu下通过R调用bash执行其他目录make命令的方法

R内置了system()和system2()两个函数可以直接调用bash命令,以下是两种常用的实现方式:

方法1:使用make自带的-C参数指定目录(推荐)

make命令的-C参数可以直接指定要执行makefile的目录,不会修改R当前的工作目录,是最稳妥的方案,示例代码如下:

# 替换为你存放makefile的目标目录路径
make_dir <- "/home/your_name/projects/python_script_dir"

# 执行默认make目标
system(paste0("make -C ", shQuote(make_dir)))

# 执行指定make目标,比如clean、build等
system(paste0("make -C ", shQuote(make_dir), " build"))

这里的shQuote()函数会自动对路径进行转义,避免路径中存在空格、特殊字符时bash解析出错。

方法2:组合cd与make命令

如果需要在目标目录执行多个关联命令,可以先切换到目标目录再执行make:

make_dir <- "/home/your_name/projects/python_script_dir"
# &&表示只有cd执行成功才会运行后面的make命令,避免在错误目录执行操作
system(paste0("cd ", shQuote(make_dir), " && make"))

常见问题排查

  • 运行前可先在R中执行system("which make")确认系统已安装make,若返回空值,可先在Ubuntu终端执行sudo apt install make完成安装。
  • 若需要捕获命令执行的输出/报错信息用于排查,可以使用更灵活的system2()函数,示例如下:
make_dir <- "/home/your_name/projects/python_script_dir"
exec_res <- system2(
  command = "make",
  args = c("-C", shQuote(make_dir), "all"),
  stdout = TRUE,
  stderr = TRUE
)
# 打印完整执行日志
print(exec_res)
  • 不要直接在调用的make命令前加sudo,会因为需要输入密码导致进程卡住,若确实需要管理员权限,可提前将对应make操作加入sudoers免密列表。

内容的提问来源于stack exchange,提问作者Angus Campbell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:21:02