For what it's worth, I have found one way to achieve what I want, which is to use "expect", which is installed on many *nix systems. In case this is useful to anyone else I'm posting a quick example...
$ expect -f test.expect [1] 7 1: yes [1] "Answer was yes" $ cat test.expect log_user 0 spawn R --quiet --vanilla set timeout 2 send "print(3+4)\n" send "source('test.R'); q()\n" expect -re ">.+\r\n" interact { -o -re ">.+\r\n" {} } $ cat test.R ans <- scan(what=character(0),nlines=1,quiet=T) print(paste('Answer was',ans)) Thus, I can retain interactivity whilst giving specific "set-up" commands to R beforehand (in this toy example, just "print(3+4)"). Meanwhile, I avoid trampling on user startup files (i.e. ".Rprofile") and I don't have to load the default packages manually. I would still suggest that getting R itself to do this -- most likely by changing the behaviour of the "-e" option to match that of ruby, perl and others -- would be very helpful (though I appreciate it may not be simple). Alternative suggestions are still welcome, of course. Regards, Jon On 19/12/2007, Jon Clayden <[EMAIL PROTECTED]> wrote: > Dear all, > > I am trying to wrap a *nix shell script around R for a particular > purpose, for which I need to get R to execute predetermined commands > but retain interactivity and allow user input during their execution. > A straight redirection of standard input is therefore not appropriate, > and I don't think "littler" is the solution because I don't want to > write an independent R script. > > What I want is effectively something like what ruby does with the '-e' > option: > > $ ruby -e 'gets' > <waits for input from terminal> > > R seems to accept an '-e' option too, even though I can't see it > mentioned in the output from 'R -h', but it doesn't work the same: > > $ R --slave --vanilla -e 'scan(what=character(0),nlines=1,quiet=T)' > character(0) > $ > > The only way I can get this to work is by creating an .Rprofile file > containing the commands I want to run, but this is suboptimal for a > number of reasons: I have difficulties if an .Rprofile already exists > in the working directory, the default packages are not loaded, and the > process doesn't quit if stop() is called. > > I have a vague inkling that this may be achievable with a > pseudoterminal (pty) or named pipe, but if anyone knows a simpler > route I'd be glad to avoid getting involved in that kind of thing... > > Many thanks in advance. > Jon > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.