How do I provide input to a C program from bash?
Try this: first:
echo w | ./ex17
This will send w to the example and output the move. This is called piping; and it essentially connects the stdout of echo to the stdin of ex17
You can feed input into a program from bash using any of the following mechanisms.
For a single line of input, you can use a here-string:
./ex17 <<<'w'
For multiple lines, you can use a here-document:
./ex17 <<'EOF'
w
second line of input
more input
EOF
Or you can move those lines out of the script and into a separate file:
./ex17 <filename
More generally, you can run a command that generates as its output the desired input to your program, and connect them together with a pipe. For instance, the above could also be written:
cat filename | ./ex17
or the original example as
echo w | ./ex17
That's more general because you can replace cat
and echo
here with any sort of program, which can do all sorts of computation to determine what it outputs instead of just dumping the contents of a static string or file.
But what you can't easily do from bash is drive input, read output, and make decisions about what to send as the next input. For that, you should look at expect. An expect script would look something like this:
#!/usr/bin/env expect
spawn ./ex17
expect ">"
send "w\n"
expect "Whats next?"
send "next line here\n"
# turn it back over to interactive user
interact