Question

I see how to have an Rscript perform the operations I want when given a filename as an argument, e.g. if my Rscript is called script and contains:

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

Then I can run from the bash command line:

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

and successfully get the contents of filename.Rmd echoed back out to me. If instead of passing the above argument a filename like filename.Rmd I want to pass it text from stdin, I try modifying my script to read from stdin:

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

but I do not know how to construct the commandline call for this case. I tried piping in the contents:

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

and also tried redirect:

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

and either way I get the error:

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

(I've also tried open(file("stdin"))). I'm not sure if I'm constructing the Rscript incorrectly, or the commandline argument incorrectly, or both.

Était-ce utile?

La solution

You need to read text from the connection created by file("stdin") in order to pass anything useful to the text argument of writeLines(). This should work

#!/usr/bin/Rscript 
writeLines(readLines(file("stdin")))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top