r - 无法使用 `knitr::opts_chunk$set(engine.path = ...)` 永久设置 `bash` 引擎路径
问题描述
背景
我在 Rmd 中有一个分析脚本。我同时使用 R 和 Bash 块。我想使用我自己安装的 Bash 版本 (5) 而不是系统默认版本 (3)。
方法
我尝试以两种方式设置我首选的 Bash 引擎的路径:
- 通过设置它
knitr::opts_chunk$set(engine.path = list(bash = '/usr/local/bin/bash'))
- 通过使用块标头在每个块的基础上设置它,例如:
```{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'}
解决方案
推荐阅读
- c# - 从 EntitySpaces 迁移到 EntityFramework
- python-3.x - 如何使用scapy像wireshark一样捕获流量?
- android - android sdk - 从 sdk 中删除不必要的文件
- php - 将 ReactJS 与 PHP 一起使用
- mysql - 哪种方法可以提高性能?
- php - 将 curl_multi 值映射到适当的数组值
- mapping - 如何在 Typescript 中使用 Automapper?
- php - 如何在 wordpress 中为自定义插件定义自定义功能
- c# - 如何从 appsettings.json 获取 json?
- ssl - Windows“受信任的人”“受信任的设备”中的证书存储