当给定一个文件名作为参数时,我看到了如何让 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/