为什么在使用expect的过程中常常遇到spawn命令找不到的问题,谈谈我的例子

            Expect是一个用来实现自动交互功能的软件套件 (Expect [is a] software suite for automating interactive tools)。

expect等待输出中输出特定的字符,通常是一个提示符,然后发送特定的响应。

  #!/usr/bin/expect
spawn ./interac.sh
expect "Enter number:"
send "1\n"
expect "Enter name:"
send "sanwu\n"
expect eof
以上面的代码为例,expect等待./interac.sh脚本文件的输出字符
Enter number:和Enter name:,并发送特定的相应 1 和sanwu。

在上面的代码中,因为我们是对于expect的隐式调用,所以需要在第一行声明对于本脚本代码的解释器。对于的expect的显式调用为在终端中键入:expect auto.sh(auto.sh为本脚本的文件名)。需要各位注意的是#!/usr/bin/expect必须放在本文件中代码的第一行。本人在vim的配置中对于sh脚本在文件生成过程中,会产生对应的文件头部分的注释,对应的文件内容如下:

#########################################################################
# File Name: auto1.sh
# Author: mahao
# mail: mahao@hust.edu.cn
# Created Time: 2013年11月07日 星期四 21时12分43秒
#########################################################################
#!/usr/bin/expect
spawn ./interac.sh
expect "Enter number:"
send "1\n"
expect "Enter name:"
send "sanwu\n"
expect eof

文件名为:auto1.sh

对于上面的脚本代码的执行结果如下:

(1)显式调用:

Fighting!root@:~/work#chmod a+x auto1.sh
Fighting!root@:~/work#expect auto1.sh
spawn ./interac.sh
Enter number:1
Enter name:sanwu
You have entered 1 sanwu
(2)隐式调用

Fighting!root@:~/work#./auto1.sh
./auto1.sh: 行 8: spawn: 未找到命令
couldn't read file "Enter number:": no such file or directory
./auto1.sh: 行 10: send: 未找到命令
couldn't read file "Enter name:": no such file or directory
./auto1.sh: 行 12: send: 未找到命令
couldn't read file "eof": no such file or directory

由于文件头的注释部分的存在,导致对于expect的隐式调用未能正确执行。

如果将#!/usr/bin/expect 放在文件的第一行,位于文件头注释的前面,隐式调用也能正确执行。

由此可见对于隐式调用而言,必须将#!/usr/bin/expect 这句声明语句放在文件的首行。

spawn是expect的内建命令,只有进入expect环境后才可以执行的expect内建命令。它主要的功能是给调用expect的运行进程加个壳,用来对于输出和特定响应之间的指令传递。

另外,使用脚本语言的参数传递等功能能够实现特定相应的选择,以及相应延时等等更为复杂的功能,具体可以参见man expect的相关描述。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值