expect脚本中设置超时,比如下面的脚本
文件expect_ssh_scp.sh
#!/usr/bin/expect                                                                              #表示使用expect解释器
set timeout 10                                                                                  #设置超时限制为10秒
spawn ssh userName@hremote_host command                            #通过ssh连接远程主机执行命令
expect {                                                                                            #第一个expect语句
     "(yes/no)" {send "yes\r";exp_continue}
     "*assword:" {send "password\r"}
}expect eof                                                                                       #指明命令交互结束
spawn scp source userName@hostName:dest                             #通过scp复制远程电脑的文件到本地
expect {                                                                                          #第二个expect语句
"(yes/no)" {send "yes\r";exp_continue}
"*assword:" {send "password\r"}
}
expect 100%
expect eof
exit
我想知道这个超时10秒,是对所有的expect语句有效,还是只针对第一个啊?如果超时限制对下面所有的expect语句都有效,比如下面的scp远程复制命令,如果数据没传输完,程序就超时了,那怎么解决呢?那样的话expect 100%这句代码又有什么作用??我看到一种解释是:代码刚开始设定了timeout的时间为10秒,如果在执行scp任务时遇到了代码中没有指定的异常,则在等待10秒后该脚本的执行会自动终止。这样理解对吗?干嘛要这个超时限制啊,感觉很影响程序的效率,在执行过程中遇见问题就返回问题信息,退出不就好了么,就算多给10秒,还不是没法解决。就好比Java中的异常处理机制,遇见异常就,throw  catch处理嘛,然后程序继续执行,这样多好,如果某一个方法非常耗时,那么就等它执行完呗,就算有一天,出现无限循环这种永远的执行不完的方法,设定一个超时,这样的逻辑感觉不对吧,出现无穷循环的问题明显是设计的问题