I’ve got a simple script like below, read 2 numbers from command line and add them together:
$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:
$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.
$./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:
#!/usr/bin/expect
spawn ./runexp.sh
expect "read 1st number" {send "1n"}
expect {read 2nd number} {send "2n"}
interact