我的代码正在无限运行而不会出现循环。 我正在调用shell脚本中的Expect脚本,效果很好, 这里的问题是脚本不是从timout {}循环中出来的。 有人可以在这方面帮助我。
spawn ssh ${USER}@${MACHINE}
set timeout 10
expect "Password: "
send -s "${PASS}\r"
expect $prompt
send "cmd\r"
expect $prompt
send "cmd1\r"
expect $prompt
send "cmd2\r"
expect $prompt
send "cmd3\r"
expect $prompt
send "cmdn\r"
#cmdn --> is about running script which takes around 4 hours
expect {
timeout { puts "Running ....." #<--- script is nout coming out of loop its running infinitely
exp_continue }
eof {puts "EOF occured"; exit 1}
"\$.*>" { puts "Finished.." ; exit 0}
}
答案 0 :(得分:0)
问题在于您的真实模式"\$.*>"
是 literally 而不是正则表达式。您需要传递-re
标志,以将该模式作为RE进行匹配,像这样(我使用的行数多于;
个字符,因为我认为这样更清晰,但YMMV在那里) :
expect {
timeout {
puts "Running ....."
exp_continue
}
eof {
puts "EOF occured"
exit 1
}
-re {\$.*>} {
puts "Finished.."
exit 0
}
}
如果可以的话,将正则表达式放在{
大括号}
中也是一个 好主意 ,因此反斜杠序列(以及其他Tcl内的元字符)不会被替换。您不必……但是所有案例中有99.99%的情况会更好。