我想在bash块中使用在R环境中定义的变量作为参数。有没有办法实现这一点?
例如,在下面的示例中,我想使用R来定义脚本的路径并将其作为参数传递给bash:
```{r}
path_to_script <- glue("{here::here()}/bash_scripts/script.sh")
\```
```{bash}
bash **path_to_script**
\```
我想在bash块中使用在R环境中定义的变量作为参数。有没有办法实现这一点?
例如,在下面的示例中,我想使用R来定义脚本的路径并将其作为参数传递给bash:
```{r}
path_to_script <- glue("{here::here()}/bash_scripts/script.sh")
\```
```{bash}
bash **path_to_script**
\```
---
title: "Untitled"
date: "09/12/2021"
output: html_document
---
```{r}
msg <- shQuote("This is a message from R.")
Sys.setenv(R_MESSAGE = msg)
```
```{bash}
echo $R_MESSAGE
```
它会产生以下输出:
在阅读@Fravadona的评论后,我添加了shQuote()
调用:这绝对是一个非常好的想法,因为你构造的路径可能包含空格或其他特殊字符。
shQuote
,只要在双引号内展开环境变量即可:echo "$R_MESSAGE"
。 - Fravadonabash
视为特殊字符的字符。 bash "$R_MESSAGE"
会忽略它们还是对它们进行操作? - user2554330$R_MESSAGE
何时被扩展:如果是在调用 bash 之前,那么你需要使用 shQuote
。如果是由 bash 扩展的,那么双引号就足够了。 - Fravadona感谢@user2554330的建议。实际上,它似乎按照我在问题中解释的方式工作。然而,这里提出了一个更简单的解决方案。即,不使用bash块,而是创建一个包含完整命令的字符串,并将其传递给R中的system()
函数。在这种情况下,我可以在同一环境中完成所有操作。
```{r}
path_to_script <- glue("{here::here()}/bash_scripts/script.sh")
arg1 <- "something"
full_command <- glue("bash {path_to_script} {arg1}")
system(full_command)
```
shQuote()
进行引用。如果 here::here()
返回包含特殊字符的内容(例如,在 Windows 上空格很常见),它将无法正确执行。 - user2554330