I am writing a script using expect in which I have to rlogin to some host & after that I need to send some commands. Now I want to exit to that host and relogin again to som
Try this construct when command
is time consuming:
. . .
send "command\r"
expect {
timeout {
puts "Running..."
exp_continue
}
"%PROMPT%" {
puts "Finished."
}
}
send "next command\r"
. . .
On timeout
you will be continuosly waiting with exp_continue
command for %PROMPT%
.
I found this post after I ran into a race condition problem: sometimes the script completed as expected and other times it didn't. Adding a catch
statement to the script ensured the desired outcome every time:
[...]
expect eof
catch wait result
Can you elaborate on "still script sending rest of the commands in between the previous process. "
I tried this and it worked.
spawn ssh host1
expect ":"
send pwd1
expect "%"
send "echo hi\r"
expect "%"
send "exit\r"
expect eof
spawn ssh host2
expect ":"
send pwd2
you're forgetting to "hit enter". After sending exit, the way to wait for the process to end os expect eof
:
send "source xyz.csh\r"
expect "%"
send "exit\r"
expect eof