use of "input" in system()
On Fri, 24 Apr 2009, Mike Miller wrote:
On Fri, 24 Apr 2009, Mike Miller wrote:
I am running bash, but system calls go to sh. I want to be able to put
that input string ("0005") into a variable and do something like this:
system( "i=`cat /dev/stdin` ; run_script > file${i}.out" ,
input=sprintf("%04d", i) )
In sh, both of these commands execute ls: echo ls | `cat /dev/stdin` echo ls | `cat -` In R, both of these simply hang until I hit ctrl-c...
system( "`cat /dev/stdin`", input="ls" ) system( "`cat -`", input="ls" )
...but the stdin is getting to the command because both of these return "ls" to stdout:
system( "cat -", input="ls" ) system( "cat /dev/stdin", input="ls" )
So what am I missing? I don't understand why the backtick method isn't working. Is there another way to do this?
I still can't figure that out, but it is OK because I found a better way. For some reason I was thinking of the system function like this... system( "command" ) ...when I could have been thinking of it like this: foo <- "command" system( foo ) Maybe obvious in retrospect, but that makes it much easier to take values from R and insert them into system commands. Here is a mini example:
i <- 5
foo <- "ls"
bar <- paste("touch file", sprintf("%04d", i), ".out", sep="")
bar
[1] "touch file0005.out" Thus I have placed two system commands into variables foo and bar. The system commands can be pasted together using " ; " as a separator...
barfoo <- paste(bar, foo, sep=" ; ") barfoo
[1] "touch file0005.out ; ls" ...then executed like so:
system( barfoo )
Mike Michael B. Miller, Ph.D. Minnesota Center for Twin and Family Research Department of Psychology University of Minnesota