新手问题 新手请教下,大家使用过 ruby expect 么?

donychen · 2015年05月06日 · 最后由 jasontang168 回复于 2015年05月11日 · 4259 次阅读

本人 ruby 新手,最近使用 expect 和 shell 写了一些脚本,想用 ruby 重写,但是不知道 ruby 中的 expect 怎么用,网上找了好久都没有结果。希望知道的大神指教一二。

我是做自动化的脚本,过程是需要安装一款软件,这款软件的安装方式类似下面这种情况:

首先解压开,然后调用其中的安装脚本后,会有如下提示:

please input install folder: /home/user (这部分需要用户输入) please input the version you choose: 2.0 (这部分需要用户输入) 。。。

类似这种形式。 我以前用 expect 脚本写的话,就每次截取上次的屏幕输出。

但是现在想转用 ruby。 不知道大家有没有用过 ruby expect,或者还有什么其它解决这类交互式安装的好方法,请麻烦告诉我一下。

或者可以贴个有类似资料的地方我自己学习。

希望大家不吝赐教,感激不尽。

自己顶一顶吧,坐等大神们。

搞这个还是用 python 吧,一搜网上一大推。

从这可以看出楼主应当是搞运维的

#3 楼 @jasontang168 实习阶段,和运维沾点边吧。 这不是最近想学 ruby,看看自己做的东西能不能都替换成 ruby 脚本。谢谢啦

@donychen,我也是做运维的,不推荐 ruby 做自动化操作,用 python 吧,多交流。

#5 楼 @jasontang168 好的,那我试试 python。 你现在一般用什么脚本语言?用 ruby 多么?

求大神们帮忙啊!

不会 shell 不是好程序员,呵呵,主要用 shell,其次 python,再次 ruby,但是最爱 ruby。

目前见过的比较复杂的用 Ruby 写的安装脚本是 https://github.com/phusion/passenger/blob/master/bin/passenger-install-nginx-module

如果楼主问 “Ruby 怎么写安装脚本” 估计很多人答,如果问 “大家使用过 ruby expect 么” 那就大大缩小了回答人群了。

#!/usr/bin/env ruby

puts "please input install folder:"
install_folder = gets.chop

puts "please input the version you choose:"
version = gets.chop

实现楼主举的例子,不需要额外的库。

@rei ,但是远程去操作主机实施安装命令的却需要第三方包',从楼主说 expect 来看,有可能是 telnet 到它机,或者 ssh 它机,不知道 ruby 有啥好 gem?

#12 楼 @jasontang168 远程没做过,例如 Chef、Puppet?

google 一大堆 example, 这个没办法给例子,只能根据你命令交互慢慢 debug 出来。 不过使用系统的 expect 命令应该比较简单,一般系统都自带这个命令,vps(精简版系统一般没有)。

https://github.com/abates/ruby_expect http://www.admin-magazine.com/Articles/Automating-with-Expect-Scripts

自动化脚本,如果楼主愿意研究的话: Puppet 和 Chef 几乎能满足绝大部分需求。 前者老牌,稳定可靠文档全;后者较新,功能丰富文档弱。

#8 楼 @jasontang168 不好意思最近周末没来得及回复。我也觉得 ruby 用着很舒服,目前正在学习阶段。

#11 楼 @rei 您好,非常感谢回复我。 不过您说的这个程序可能和我说的有点出入。

我说的是,另外一个安装程序,会出现这样的提示,我需要 ruby 脚本匹配安装程序的提示,并给出相应答案,而不是做这样提示接受的程序。

再次感谢,希望您知道的话可以帮助我。

#14 楼 @gihnius 非常感谢,我需要的就是这种情况的例子,谢谢您。

#15 楼 @kgen 我现在就在帮实习的公司使用 chef 做一些事情,但是我感觉自己了解的只是皮毛,等到做具体的任务时候,还是用 chef 把一堆 shell 脚本丢上去跑,然后 chef 拿不到错误结果,我感觉这样做好 low,不知道我是不是对 chef 了解不深刻,还希望得到您的指点,谢谢

#20 楼 @donychen 的确有部分场景只能用 Shell 脚本解决,其实 Chef 没有完全替代 Shell 脚本,只是把数据和流程都标准化了,并且能并发和中心化管理。 而且,考虑到风险,你这样先把熟悉的 Shell 脚本扔上去跑,然后逐步替换的做法,算稳健的运维流程,挺好的,不用担心 low 的问题。

#21 楼 @kgen 非常感谢您的指点 (^-^)

需要 登录 后方可回复, 如果你还没有账号请 注册新账号