Expect-----能与交互式程序进行“可程序化”会话的脚本语言
(2012-04-12 10:12:50)
标签:
expecttcltcl/tkshell交互脚本it |
分类: 计算机知识启蒙 |
命令选项概述
expect [ -dDinN ] [ -c cmds ] [ -[f|b] ] cmdfile ] [ args ]
概述:
Expect是一种能够按照脚本内容里面设定的方式与交互式程序进行“会话”的程序。根据脚本内容,Expect可以知道程序会提示或反馈什么内容以及什么是正确的应答。它是一种可以提供“分支和嵌套结构”来引导程序流程的解释型脚本语言。另外,还可以在随时需要的时候把控制权交给用户,然后再还给脚本。
ExpectK是Expect和Tk的混合体。它就按照Expect和Tk的方式运行。Expect也可以直接嵌入到C或是C++程序中(这种情况是不涉及Tcl解释)。请看libexpect(3).
Expect的名字是从被UUCP(UNIX到UNIX的拷贝),Kermit(一种文件传输协议,
由哥伦比亚大学设计)和一些其他Modem控制等程序设计思维大众化的“send/expect”时序理念中得出的。不像UUCP,Expect已经被广泛应用于很多你可以想像的到的程序和任务当中了。
Expect还能同时和多个程序交互。
例如:下面是一些Expect可以做到的事情
让你的计算机呼叫你,这样你可以不用付呼叫费。
启动一个游戏(例如:rogue),如果不是最佳配置,则一直重新启动,直到是最佳配置为止。然后把控制权转交给你。
运行fsck的时候,用”yes”或是”no”来回应fsck的交互问题。在没有预设答案标准的情况下把控制权返还给你。
连接到另一个网络或是BBS站点,自动收取你的邮件,就像邮件是发往你的当地系统一样。
在执行rlogin,telnet,tip,su,chgrp等等命令的时候保存“环境变量”,“当前目录”或是其他一些信息。
有很多原因致使Shell不能完成这样的任务(你自己可以试试看)。而这一切对于Expect
来说都是可以的。一般情况下,当一个程序需要程序与用户进行交互的时候就需要用到Expect。还需要的一个前提是这种交互必须能程序化(例如:循环结构,选择结构等等,个人认为必须是有规律可循的)。如果需要的话,Expect还能把控制权返还给用户。同样,用户也可以在任何时候把控制权还给脚本程序。