首页 > 解决方案 > 无法使用 `knitr::opts_chunk$set(engine.path = ...)` 永久设置 `bash` 引擎路径

问题描述

背景

我在 Rmd 中有一个分析脚本。我同时使用 R 和 Bash 块。我想使用我自己安装的 Bash 版本 (5) 而不是系统默认版本 (3)。

方法

我尝试以两种方式设置我首选的 Bash 引擎的路径:

  1. 通过设置它knitr::opts_chunk$set(engine.path = list(bash = '/usr/local/bin/bash'))
  2. 通过使用块标头在每个块的基础上设置它,例如:
```{bash, engine.path='/usr/local/bin/bash'}

结果

第二种方法似乎有效,而第一种方法无效。这是一个最小的代表:

​```{r setup}
library(knitr)
opts_chunk$set(engine.path = list(bash = '/usr/local/bin/bash'))
​```

​```{bash test, engine.opts='-l'}
echo "$BASH_VERSION"
​```
# /Users/name/.bash_profile: line 5: shopt: globstar: invalid shell option name
# 3.2.57(1)-release

​```{bash, engine.opts = '-l', engine.path='/usr/local/bin/bash'}
echo "$BASH_VERSION"
​```
# 5.1.4(1)-release

块无法正确地shopt从我的命令中获取命令.bash_profile是我遇到这个问题的原因。

问题

根据knitr设置块引擎路径的文档通过使用 设置引擎路径opts_chunk$set,预期的行为是两个块输出相同的 Bash 版本(5.1.4)。

为什么不能opts_chunk$set(engine.path = list(bash = '/usr/local/bin/bash'))为所有后续块永久设置 Bash 可执行文件的路径?


编辑:目前,唯一可行的解​​决方案是将首选bash可执行文件的路径放在每个bash块中,如下所示:

```{bash, engine.path='/usr/local/bin/bash'}

标签: rbashr-markdownknitr

解决方案


推荐阅读