I’ve got a simple script like below, read 2 numbers from command line and add them together:
JavaScript
x
$cat runexp.sh
#!/bin/bash
echo "read 1st number"
read n1
echo "read 2nd number"
read n2
expr $n1 + $n2
It runs, no problem. Then I wrote an expect script like below:
JavaScript
$cat autorun.sh
#!/usr/bin/expect
spawn ./runexp.sh
expect 'read 1st number' {send "1"}
expect 'read 2nd number' {send "2"}
interact
Seems still it prompts to read from command line, after quite a long time, it ends.
JavaScript
$./autorun.sh
spawn ./runexp.sh
read 1st number
5
4
3
5
4
3
read 2nd number
9
Where did I get wrong? Thanks.
Advertisement
Answer
You have to send the newlines as well, otherwise it will just wait (at least until the default timeout, which I believe is ten seconds).
In addition, expect
is not a fan of single quotes for enclosing strings. Like Tcl (from whence it came), it wants either double quotes or braces. This works just fine:
JavaScript
#!/usr/bin/expect
spawn ./runexp.sh
expect "read 1st number" {send "1n"}
expect {read 2nd number} {send "2n"}
interact