- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
expect相关知识分享
expect 相关知识分享
朱倩倩
问题
从机器A上ssh到机器B上,然后执行机器B上的命令,如何使之自动化完成?
expect是什么?
expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。
expect的作者Don Libes在1990年开始编写Expect时对expect做有如下定义:expect是一个用来实现自动交互功能的软件套件。
使用它,系统管理员可以创建脚本来对命令或程序进行输入,而这些命令和程序是期望从终端得到输入,一般来说这些输入都需要手工输入进行的。expect则可以根据程序的提示模拟标准输入提供给程序需要的输入来实现交互程序执行。甚至可以实现简单的BBS聊天机器人。
why
Shell对程序提供了最小限度的控制(开始,停止,等等),而把交互的特性留给了用户。这意味着有些程序,你不能非交互的运行,比如说passwd。有一些程序可以非交互的运行,但在很大程度上丧失了灵活性,比如说fsck。这表明Unix的工具构造逻辑开始出现问题。expect恰恰填补了其中的一些裂痕,解决了在Unix环境中长期存在着的一些问题。
when
ssh, ftp, rsh, rlogin, telnet, tip, su, chgrp, etc.
expect is useful for running any program which requires interaction between the program and the user.—来自man page
即对所有需要交互的程序使用
四个命令
expect:从进程接收字符串
send:用于向进程发送字符串
spawn:启动新的进程
interact:允许用户交互
expect-send
expect hi\n“
send hello there!\n“
从标准输入中等到hi和换行键后,向标准输出输出hello there。
$expect_out(buffer)
expect hi\n
send you typed $expect_out(buffer)
send but I only expected $expect_out(0,string)
$expect_out(buffer)存储了所有对expect的输入,$expect_out(0,string)存储了匹配到expect参数的输入
模式-动作
expect最常用的语法是来自tcl语言的模式-动作。
单一分支模式:
expect hi {send You said hi}
多分支模式
expect {
hi { send You said hi\n}
hello { send Hello yourself\n}
bye { send That was unexpected\n}
}
spawn命令
上文的所有demo都是和标准输入输出进行交互,expect也可以和某一个进程进行交互。
spawn命令就是用来启动新的进程的。
spawn后的send和expect命令都是和spawn打开的进程进行交互的。
spawn命令
set timeout -1 spawn ftp $host
expect Name
send “test\r
expect Password:
send “abc123\r
expect ftp
send binary\r
expect ftp
send get test.tar.gz\r
exp_continue
上面那段代码还可以写成:
set timeout -1 spawn ftp $host? ? ? ? ? ?
expect {
Name{ send test\r; exp_continue}
password: { send abc123\r }
}
…
interact
到现在为止,我们已经可以结合spawn、expect、send自动化的完成很多任务了。但是,如果想在适当的时候人工干预这个过程?比如下载完ftp文件时,仍然可以停留在ftp命令行状态,以便手动的执行后续命令。interact可以达到这些目的。下面的demo在自动登录ftp后,允许用户交互。
interact
spawn ftp $host
expect Name
send “test\r
expect Password: send “abc123\r“
interact
问题
从机器A上ssh到机器B上,然后执行机器B上的命令,如何使之自动化完成?
#!/usr/bin/expect -f
set timeout -1
spawn ssh $host -l $name
expect *pass
您可能关注的文档
- cha4词法分析white.ppt
- Chap 5 Return and Risk from historical Record.ppt
- Chap011 risk and return-the capital asset pricing modee.ppt
- Chanel公司介绍.doc
- Ch29-9e-lecture.ppt
- Chap004_Product_and_Service_Design.ppt
- Chap013 risk, cost of capital and capital budgeting.ppt
- chap1 second.ppt
- Chapter 1 Prior knowledge.ppt
- Chapter 10英语.ppt
文档评论(0)