深入理解 Expect 脚本中的变量作用域与多进程处理
1. 封装命令检查响应的过程
在进行 FTP 操作时,我们常常需要发送命令并检查响应。例如,发送 get $file2 命令后,期望得到 220*ftp> 这样的响应。为了简化这个过程,我们可以将其封装到一个过程中:
proc ftpcmd {cmd} {
send "cmd\r"
expect "220*ftp> "
}
在这个过程中, spawn_id 没有在本地定义,也没有在全局命令中提及,因此 send 和 expect 命令会从全局作用域中查找它。同样, expect 命令在处理 timeout 变量时也是如此。如果在过程中没有定义 timeout ,则会使用全局的 timeout 。
下面是不同定义方式的 ftpcmd 过程:
# 使用本地 timeout
proc ftpcmd {cmd} {
set timeout 20
send "cmd\r"
expect "220*ftp> "
}
# 使用全局 timeout
proc ftpcmd {cmd} {
global timeo
超级会员免费看
订阅专栏 解锁全文
3

被折叠的 条评论
为什么被折叠?



