I have a ruby script that executes a linux command however the command
returns a question:
This will update 1 entry, continue? [y/N]:
I can see this output in when in debug mode for the script. How can I
pass a y and return/enter automatically for each time this question
comes up? I tried to add system(echo y) and puts "\r" to send a y and do
a return but no success. Any pointers?
The system method runs the child program non-interactively from the
perspective of your script. You'll want to look at IO.popen. That will
run the child and return its stdin and stdout as a duplexed IO object
for you. You can then use something like the expect library (part of
the Ruby standard library) to watch the program's output for the prompt
at which point you can send whatever you like using puts or print on the
IO object popen gave you.
require 'expect'
child_io = IO.popen(<<-BASH, 'r+')
bash -c "
printf 'the prompt> '
read
echo The user typed \\\\\\"\\"\\$REPLY\\"\\\\\\"
"
BASH
child_io.expect('the prompt> ') { child_io.puts 'this is my response' }
puts child_io.read
#-> The user typed "this is my response"
-Jeremy
···
On 12/29/2010 12:36 AM, Richard Sandoval wrote:
Hello,
I have a ruby script that executes a linux command however the command
returns a question:
This will update 1 entry, continue? [y/N]:
I can see this output in when in debug mode for the script. How can I
pass a y and return/enter automatically for each time this question
comes up? I tried to add system(echo y) and puts "\r" to send a y and do
a return but no success. Any pointers?