Mailing List Archive
tlug.jp Mailing List tlug archive tlug Mailing List Archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]Re: [tlug] Sticky problem with pipes, head and tails
- Date: Wed, 1 Sep 2010 08:53:16 +0900
- From: Kalin KOZHUHAROV <me.kalin@example.com>
- Subject: Re: [tlug] Sticky problem with pipes, head and tails
- References: <1283296883.10830.33.camel@example.com>
Oh well... May be a good candidate for http://thedailywtf.com/ (for the original code)? On Wed, Sep 1, 2010 at 08:21, Stuart Luppescu <slu@example.com> wrote: > Hello, As you can see from my signature in this message (yes, I know > it's longer than 4 lines), 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 > > 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 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); > } You are hitting the hard coded default case (Duh!) which is naively coded to say "Program %s doesn't seem to exist\n" instead of showing you exit_status... Why you get /usr/local/bin/r-fortune in execlp(producer, producer, (char *) 0) is beyond me and why use producer twice? But why don't you put your "code" in a bash script like this: #!/bin/sh /usr/bin/R --no-save --no-restore < /home/sl70/print-fortune.R |tail -n +23 | head -n -2 2> /dev/null then execute that as a work around? Cheers, Kalin.
- Follow-Ups:
- Re: [tlug] Sticky problem with pipes, head and tails
- From: Stuart Luppescu
- References:
- [tlug] Sticky problem with pipes, head and tails
- From: Stuart Luppescu
Home | Main Index | Thread Index
- Prev by Date: [tlug] Sticky problem with pipes, head and tails
- Next by Date: Re: [tlug] Sticky problem with pipes, head and tails
- Previous by thread: [tlug] Sticky problem with pipes, head and tails
- Next by thread: Re: [tlug] Sticky problem with pipes, head and tails
- Index(es):
Home Page Mailing List Linux and Japan TLUG Members Links