shell expect settimeout超时问题

[复制链接]
查看11 | 回复2 | 2021-1-27 05:43:18 | 显示全部楼层 |阅读模式
expect脚本中设置超时,比如下面的脚本

文件expect_ssh_scp.sh
#!/usr/bin/expect#表示使用expect解释器
settimeout10#设置超时限制为10秒
spawnsshuserName@hremote_hostcommand#通过ssh连接远程主机执行命令
expect{#第一个expect语句
"(yes/no)"{send"yes\r";exp_continue}
"*assword:"{send"password\r"}
}
expecteof#指明命令交互结束
spawnscpsourceuserName@hostName:dest#通过scp复制远程电脑的文件到本地
expect{#第二个expect语句
"(yes/no)"{send"yes\r";exp_continue}
"*assword:"{send"password\r"}
}

expect100%
expecteof
exit

我想知道这个超时10秒,是对所有的expect语句有效,还是只针对第一个啊?
如果超时限制对下面所有的expect语句都有效,比如下面的scp远程复制命令,如果数据没传输完,程序就超时了,那怎么解决呢?
那样的话expect100%这句代码又有什么作用??
我看到一种解释是:代码刚开始设定了timeout的时间为10秒,如果在执行scp任务时遇到了代码中没有指定的异常,则在等待10秒后该脚本的执行会自动终止。这样理解对吗?
干嘛要这个超时限制啊,感觉很影响程序的效率,在执行过程中遇见问题就返回问题信息,退出不就好了么,就算多给10秒,还不是没法解决。就好比Java中的异常处理机制,遇见异常就,throwcatch处理嘛,然后程序继续执行,这样多好,
如果某一个方法非常耗时,那么就等它执行完呗,就算有一天,出现无限循环这种永远的执行不完的方法,设定一个超时,这样的逻辑感觉不对吧,出现无穷循环的问题明显是设计的问题

分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:43:18 | 显示全部楼层
有没有知道的朋友,讲解一下啊,谢谢
回复

使用道具 举报

千问 | 2021-1-27 05:43:18 | 显示全部楼层
https://blog.csdn.net/beibei0921/article/details/45370363
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行