[CentOS] [OT] bash here documents

Mon Jun 24 14:49:49 UTC 2013
m.roth at 5-cent.us <m.roth at 5-cent.us>

Steve 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.

I've only done a tiny bit of C++, but a bunch of years of C. First, I
think the \cC is doing something odd; in vi, I'd have tried typing it in
with <ctrl-v><ctrl-c>. Second, do you want the output to be "blah bleh"?

Finally, I am *very* strongly *not* a fan of while. If I have to use it, I
set *some* limit - in this case, I'd look for an end-of-file, or some word
you decide for "stop here".

As the old joke goes, about hunting elephants in Africa, a programmer sets
up a search patter up, across, up, back, starting in Capetown and ending
in Cairo.

The *experienced* programmer puts an elephant in the zoo in Cairo to
ensure termination of the loop.

          mark