LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1450|回复: 4

[问题] bash下如何模拟键盘输入

[复制链接]
发表于 2009-1-24 16:03:13 | 显示全部楼层 |阅读模式
我用expect 工具模拟实现的自动交互。但是发现个问题。
如果程序回馈给标准输出的是一段话。用"*"无法匹配。。

具体实例发出来给大家看看。
  1. spawn env LANG=en_US sudo apt-get autoremove amsn
  2. expect "*\[Y/n\]\?*"
  3. send "y\n"
  4. exit 0
复制代码

下面是输出结果
  1. $ expect test1.ex
  2. spawn env LANG=en_US sudo apt-get autoremove amsn
  3. Reading package lists... Done
  4. Building dependency tree      
  5. Reading state information... Done
  6. The following packages were automatically installed and are no longer required:
  7.   libsnack2 amsn-data tcl8.5 tk8.5 tcl-tls
  8. The following packages will be REMOVED:
  9.   amsn amsn-data libsnack2 tcl-tls tcl8.5 tk8.5
  10. 0 upgraded, 0 newly installed, 6 to remove and 5 not upgraded.
  11. After this operation, 20.5MB disk space will be freed.
  12. Do you want to continue [Y/n]?
复制代码
他会在这里停止掉。
我觉得是没有正确匹配的原因。(expect "Do you want to continue [Y/n]? " send "y\n" 已经用过了。。还是一样的)

我想可能是回馈信息是一段话的原因吧。一句话的可以匹配比如SUDO。。但是一段话的用正则表达式好像都没有用?~
应该怎么来匹配这个一段话中的[Y/n]呀??
发表于 2009-1-24 20:02:18 | 显示全部楼层
看了半天还是没看懂,还是来我家给我讲讲好了.
由于下载太慢 想扩展下pacman 想把列表的每个软件分配一个wget下载 正好要用到LZ说的东东 谢谢LZ了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-1-24 20:23:58 | 显示全部楼层
没人用过自动交互??expect???
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-1-24 23:05:54 | 显示全部楼层
希望来看帖子的人帮我测试一下.
  1. #!/bin/bash
  2. expect -c ' #调用expect 命令'内容'为expect 命令
  3. spawn sudo pacman -Syu #预执行命令 sudo pacman -Syu
  4. expect "*password*" {send "你的sudo密码\r/如果是nopasswd的朋友把这行#注释掉"} #匹配标准输出的反馈信息如果能够匹配*password* 那么发送"你的密码到标准输入并且回车"
  5. expect "*Y\/n*" {send "y\r"} # 继续匹配标准输出的反馈信息如果能够匹配*Y\/n*,那么发送"y"到标准输入并且回车
  6. '
复制代码

用这个方法可以实现很多SHELL的自动交互问题。比如自动连接FTP 下载资源等等,详见man expect ,如果没有expect工具的朋友,请安装它。软件包可以在仓库里找到。
回复 支持 反对

使用道具 举报

发表于 2009-1-24 23:47:47 | 显示全部楼层
以前用linux下锐捷的时候有个这样的脚本自动登录重连,想修改一下,不会,不了了之。

lz可以搜索一下那个脚本参考参考
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表