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.

Was it helpful?

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")))
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top