读取Rscript或从stdin获取输入

cbo*_*tig 7 bash stdin r

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

#!/usr/bin/Rscript 
path <- commandArgs()[1]
writeLines(readLines(path))
Run Code Online (Sandbox Code Playgroud)

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

Rscript script filename.Rmd --args dev='svg'
Run Code Online (Sandbox Code Playgroud)

并成功地将filename.Rmd回复的内容发回给我.如果不是传递上面的参数像filename.Rmd我想传递文本的文件名stdin,我尝试修改我的脚本从stdin读取:

#!/usr/bin/Rscript 
writeLines(file("stdin"))
Run Code Online (Sandbox Code Playgroud)

但我不知道如何为这种情况构建命令行调用.我尝试了内容管道:

cat filename.Rmd | Rscript script --args dev='svg'
Run Code Online (Sandbox Code Playgroud)

并尝试重定向:

Rscript script --args dev='svg' < filename.Rmd
Run Code Online (Sandbox Code Playgroud)

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

Error in writeLines(file("stdin")) : invalid 'text' argument
Run Code Online (Sandbox Code Playgroud)

(我也试过open(file("stdin"))).我不确定我是否错误地构造了Rscript,或者错误地构造了命令行参数,或者两者都没有.

Rei*_*son 9

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

#!/usr/bin/Rscript 
writeLines(readLines(file("stdin")))
Run Code Online (Sandbox Code Playgroud)