让Rscript读取或从stdin获取输入

让Rscript读取或从stdin获取输入,r,bash,stdin,R,Bash,Stdin,我了解了在给定文件名作为参数时,如何让Rscript执行我想要的操作,例如,如果我的Rscript被称为script,并且包含: #!/usr/bin/Rscript path <- commandArgs()[1] writeLines(readLines(path)) 并成功地将filename.Rmd的内容回显给我。如果我不想传递像filename.Rmd这样的文件名,而是想从stdin传递文本,我会尝试修改脚本以从stdin读取: #!/usr/bin/Rscript wri

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

#!/usr/bin/Rscript 
path <- commandArgs()[1]
writeLines(readLines(path))
并成功地将
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

(我还尝试了
打开(文件(“stdin”)
)。我不确定是Rscript构造不正确,还是命令行参数构造不正确,或者两者都不正确

您需要从
file(“stdin”)
创建的连接中读取文本,以便将任何有用的内容传递给
writeLines()的
text
参数。这应该行得通

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

可能重复,但您的错误可能是使用
writeLines
读取vs
readLines
谢谢;使用
readLines(file(“stdin”)
代替
open(file(“stdin”))
解决了我的问题。
Error in writeLines(file("stdin")) : invalid 'text' argument
#!/usr/bin/Rscript 
writeLines(readLines(file("stdin")))