[R] [semi-OT] Using fortune() in an email signature

Matt Shotwell shotwelm at musc.edu
Thu Sep 2 00:11:16 CEST 2010


Or using R & GNU tools:

matt at max:~$ R -e "fortunes::fortune()" | gawk '/^[^>]/ {print}'

It's not a question of trying variations, rather of following
instructions.
   -- Brian D. Ripley (about using 'Writing R Extensions')
      R-help (January 2006)

-Matt

On Wed, 2010-09-01 at 16:49 -0400, Stuart Luppescu wrote:
> Hello, As you can see from my signature in this message, I use the R
> fortune function to generate a fortune, which is then fed to the
> signature program, which constructs a named pipe containing the
> fortune-bearing sig, which is then included in mail messages. The
> problem is that it's got extraneous junk in it and I can't figure out
> how to get rid of it. This is the command that generates the fortune:
> 
> /usr/bin/R --no-save --no-restore -q < /home/sl70/print-fortune.R
> (where print-fortune.R is just
> library(fortunes)
> fortune()
> )
> 
> This produces this:
> > library(fortunes)                                                             
> > fortune()
> 
> Michael Watson: Hopefully this one isn't in the manual or I am about to get shot :-S
> Peter Dalgaard: *Kapow*...
>    -- Michael Watson and Peter Dalgaard (question on axis())
>       R-help (February 2006)
> 
> > 
> 
> I would like to remove the first two lines and the last line, so I
> changed the command to this:
> /usr/bin/R --no-save --no-restore < /home/sl70/print-fortune.R  |tail \
> -n  +23  | head -n -2 2> /dev/null
> 
> That give the desired result when I run it at the command line, but when
> I feed it to the signature program, I get this message:
> 
> Program /usr/local/bin/r-fortune doesn't seem to exist
> 
> This is the signature program code that produces this error:
> 
>          /* check for existence of program by forking and then trying to
>                exec() it in the child */
>             pid = fork();
>             switch (pid) {
>             case -1:            /* oh well */
>                 perror("Couldn't fork() a child process");
>                 exit(EXIT_FAILURE);
>             case 0:             /* in child */
>                 /* close stdout */
>                 close(1);
>                 execlp(producer, producer, (char *) 0);
>                 exit(EXIT_FAILURE);
>             default:
>                 waitpid(pid, &exit_status, 0);
>                 if (exit_status != EXIT_SUCCESS) {
>                     fprintf(stderr, "Program %s doesn't seem to exist
> \n",
>                             producer);
>                     exit(EXIT_FAILURE);
>                 }
> 
> Unfortunately, I don't understand this at all. Can anyone give me a clue
> as to what's happening?
> 
> Thanks.

-- 
Matthew S. Shotwell
Graduate Student 
Division of Biostatistics and Epidemiology
Medical University of South Carolina



More information about the R-help mailing list