[CentOS] [OT] bash here documents

Steve zephod at cfl.rr.com
Mon Jun 24 17:21:06 UTC 2013


---- Tony Mountifield <tony at softins.co.uk> wrote: 
> In article <20130624135817.10QZO.129278.root at cdptpa-web19-z02>,
> Steve <zephod at cfl.rr.com> wrote:
> > Suppose I have this C++ program:
> > #include <iostream>
> > int main (int argc, char** argv)
> > {
> >     while (1)
> >     {
> >         char cmd[80];
> >         std::cin.getline(cmd, 80);
> >         std::cout << "response to " << cmd << std::endl;
> >     }
> > }
> > 
> > compiled by: c++ -o junk junk.cpp
> > 
> > and I have this bash script:
> > #!/bin/bash
> > ./junk <<EOF
> > blah
> > bleh
> > \cC
> > EOF
> > echo "Something else"
> > 
> > When I run the script, the program starts and waits for input forever.
> > I have 2 questions:
> > 1) The "blah" and "bleh" line are not echoed to cout. Why not? Does the here document not send the data to stdin?
> > 2) How do I terminate the program? When run interactively, I use <ctrl>-C. 
> 
> You should be testing the return value from std::cin.getline() for
> end-of-file. You are not testing it for any error. Always test return values.
My program is a quick-and-dirty way to simulate the actual program I am trying to use.
I have no access to the code and all I know about it is that when I enter a command, it responds and the only way to kill it is with <ctrl>-C.

> In your script, the end of the here document will cause your program to see
> end-of-file (this is NOT the string "EOF" - that's just the way you denote
> the end of the here doc).
I am aware of that. I'm trying to find a way to send the program <Ctrl>-C from the script.

> And you really ought to find a forum or mailing list where this kind of
> question is ON-topic. Flagging the subject OT isn't a magic permission
> to post anything you like!
I agree, I really ought to.



More information about the CentOS mailing list