Expect Module and Bash script

How do I use ruby expect to feed input to a simple bash script? Here is a minimal example of what I'm trying to do. All help appreciated.

First, the simple bash script. When run from the command line it performs as I expect.

#!/bin/bash
echo "1) red"
echo "2) blue"
echo "3) green"
echo "#? "
read CHOICE
sleep 5
echo "$CHOICE is done"
exit 0

Now for the ruby script I want to work with the bash script

#!/usr/bin/env ruby

require 'expect'
require 'pty'

p = PTY.spawn('./simple') do |read,write,pid|
  write.sync = true
  read.sync = true
  $expect_verbose = true # shows actions on screen
  
  read.expect("#? ") {write.puts "3"}
    
end

When ruby operates the bash script, I doesn't seem like the input is given to bash.

I've tried ruby 1.8.4 on OSX and ruby 1.8.5 on Fedora Core 6.

R.B.Love wrote:

How do I use ruby expect to feed input to a simple bash script? Here
is a minimal example of what I'm trying to do. All help appreciated.

First, the simple bash script. When run from the command line it
performs as I expect.

#!/bin/bash
echo "1) red"
echo "2) blue"
echo "3) green"
echo "#? "
read CHOICE
sleep 5
echo "$CHOICE is done"
exit 0

tricky but should work

#!/usr/bin/ruby
`script_to_feed<<END
red
END`

-rb.

···

--
Posted via http://www.ruby-forum.com/\.

Uh, thanks but it doesn't use the expect module at all. Does it not work? I have a lot more I want to do with my script, this was just a minimal example.

I assume the failure is in my understanding, not the expect process.

···

On 2007-02-03 13:27:35 -0600, Rodrigo Bermejo <rodrigo.bermejo@ps.ge.com> said:

R.B.Love wrote:

How do I use ruby expect to feed input to a simple bash script? Here
is a minimal example of what I'm trying to do. All help appreciated.

First, the simple bash script. When run from the command line it
performs as I expect.

#!/bin/bash
echo "1) red"
echo "2) blue"
echo "3) green"
echo "#? "
read CHOICE
sleep 5
echo "$CHOICE is done"
exit 0

tricky but should work

#!/usr/bin/ruby
`script_to_feed<<END
red
END`