文件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处理嘛,然后程序继续执行,这样多好, 如果某一个方法非常耗时,那么就等它执行完呗,就算有一天,出现无限循环这种永远的执行不完的方法,设定一个超时,这样的逻辑感觉不对吧,出现无穷循环的问题明显是设计的问题