Expect is a powerful tool for automating interactive applications.
It runs script files written in the esoteric “Tool Command Language”, TCL.
The docs are here:
To invoke expect you simply point it at your script file:
expect -f <script> [any other args]
Handle a known sequence of prompts
spawn annoying_program_with_unskippable_prompt
expect "Is this OK?"
send "yes"
expect "Are you sure?"
send "YES!"
Handle an unknown sequence of prompts
expect {
"Say yes:" {
send "yes"
exp_continue
}
"Say no:" {
send "no"
exp_continue
}
}
exp_continue
resumes execution, so this is effectively an infinite loop.
Exit when the spawned command ends
expect eof
exit
Parameterise the script with shell arguments
argv
and argc
are special variables that hold the values and number of
arguments:
expect <script> a -b -c -d
…
argc = ["a", "-b", "-c", "-d"]
argv = 4
If you want to use these in a spawn
command, they can be extracted like so:
spawn [lindex $argv 0] {*}[lrange $argv 1 end]
This would execute:
spawn a -b -c -d