r - 让 Rscript 读取或从标准输入获取输入

标签 r bash stdin

当给定一个文件名作为参数时,我看到了如何让 Rscript 执行我想要的操作,例如如果我的 Rscript 被称为 script 并且包含:

#!/usr/bin/Rscript 
path <- commandArgs()[1]
writeLines(readLines(path))

然后我可以从 bash 命令行运行:

Rscript script filename.Rmd --args dev='svg'

并成功获得 filename.Rmd 的内容回显给我。如果不是向上面的参数传递一个像 filename.Rmd 这样的文件名,我想从 stdin 传递文本,我尝试修改我的脚本以从 stdin 读取:

#!/usr/bin/Rscript 
writeLines(file("stdin"))

但我不知道如何为这种情况构造命令行调用。我尝试在内容中添加管道:

cat filename.Rmd | Rscript script --args dev='svg'

还尝试了重定向:

Rscript script --args dev='svg' < filename.Rmd

无论哪种方式我都会得到错误:

Error in writeLines(file("stdin")) : invalid 'text' argument

(我也尝试过 open(file("stdin")))。我不确定我是否错误地构建了 Rscript,或者错误地构建了命令行参数,或者两者兼而有之。

最佳答案

您需要从 file("stdin") 创建的连接中读取文本,以便将任何有用的信息传递给 writeLines() 的 text 参数。这应该有效

#!/usr/bin/Rscript 
writeLines(readLines(file("stdin")))

关于r - 让 Rscript 读取或从标准输入获取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22796434/

相关文章:

Node.js - 如何从 process.stdin 读取长字符串(超过 10000 个字符)?

我可以同时使用 scanf 和 getchar 来读取文件吗?

r - ggplot2 道奇重叠 - 保留每个元素的宽度

R:将嵌套的for循环转换为应用函数

linux - 显示大于0的文件内容

linux - cronjob 等待问题

c++ - std::cin 到 char 数组会跳过空格吗?

r - 如何识别循环中操作的警告生成实例?

r - 按行 r 映射嵌套数据

linux - 在 Linux 中写一个脚本在每个最大深度为 2 的子目录中运行 make