LinuxSir.cn,穿越时空的Linuxsir!

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

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

[复制链接]
发表于 2009-1-23 13:47:50 | 显示全部楼层 |阅读模式
我想要在bash下模拟键盘输入。
现在有两个实例。
1. 如果我在使用未配置sudo nopasswd的情况下。我用sudo 执行命令然后在标准输出位置,提示我用键盘标准输入密码。我想在不用自己从键盘输入,自动的把密码填入并且确认。
2.如果我在执行某个程序操作后,提示我Y/N,我想自动输入N到标准输入。

请问这样的操作应该怎么实现~?~~?
发表于 2009-1-23 14:45:00 | 显示全部楼层
lz找些expect的资料吧,如果编程功力不错的话c语言也可以实现
回复 支持 反对

使用道具 举报

发表于 2009-1-23 14:48:48 | 显示全部楼层
expect 应该没有问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-1-23 21:04:20 | 显示全部楼层
感谢楼上2位。。我去试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-1-24 02:41:55 | 显示全部楼层
感谢楼上2位。。我去试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-1-24 03:12:10 | 显示全部楼层
另外遇到个问题。。
具体实例发出来给大家看看。
  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-25 18:54:44 | 显示全部楼层
Post by firefoxmmx;1941071
另外遇到个问题。。
具体实例发出来给大家看看。

  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]呀??

似乎\r是回车啊。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-1-28 14:33:37 | 显示全部楼层
\r我也试过。。
无效。
就后面一个y/n弄不掉。。后来我用PYTHON脚本写问题解决了。。(不过,遇到一个问题。就是看不到完整的标准输出信息.看到的是输出的截取)
回复 支持 反对

使用道具 举报

发表于 2009-1-30 21:15:51 | 显示全部楼层
楼主可以googel “xrgsu expect”,有一个xrgsu的上网脚本可以参考。另外请教楼主的Python实现。
  1. #! /usr/bin/expect
  2. spawn myxrgsu -a
  3. expect "Please input your user name:"
  4. send "your name\r"
  5. expect "Please input your password:"
  6. send "your password\r"
  7. expect "Use DHCP,1-Use,0-UnUse(Default: 0):"
  8. send "\r"
  9. expect "Use default auth parameter,0-Use 1-UnUse(Default: 0):"
  10. send "\r"
  11. expect "LogOff:"
  12. puts stdout "Authenticate SUCCESSFULLY!"
  13. sleep 360000
  14. #end
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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