InfoQ

新闻

Rush——Ruby中的面向对象shell

作者 Mirko Stocker译者 李明(nasi) 发布于 2008年2月29日 下午8时20分

社区
Ruby
主题
部署/数据中心,
动态语言,
脚本,
Linux
标签
部署,
语言

Rush——Ruby中的shell——是一个使用Ruby语法的面向对象shell。面向对象意味着你操作和传递的不仅仅是字符串,而是带有自身方法和属性的、真正的Ruby对象。所以,使用者可以调用一个目录对象的ls方法来实现ls -l /var命令同样的功能:

rush> root['/var/'].ls
 //var/
 db+
 lib+
 log+
 run+
 [...]

Rush被认为是常见Unix环境中最常用的内建命令和核心工具包的替代品,并带有面向对象编程语言所能带来的全部益处。但rush所带来的还不单单是这些:

然而rush不仅只是一个交互式shell和一个库而已:它可以从单一位置操控任意数量的远程机器。在服务器之间复制文件或目录就像在本地一样无缝。

我们访问了rush的开发者Adam Wiggins。Adam开发rush开始时仅是为了满足自己的需求: 

当我刚开始使用Ruby的时候,我曾希望有一个Ruby语法的unix shell的替代品。我当时能做的就只能写那种满是倒引号(backticks)的shell脚本来作为Ruby脚本。

面向对象shell并不是一个新主张。例如微软已经连同Windows Server 2008一起发布了基于.NET的新版PowerShell,它也可看成是创建rush的灵感来源。Ruby强大的元编程能力使得扩展rush非常容易。例如,让我们来扩展Box(表示一台单独的机器),给其添加一个返回IP地址的方法。修改.rush/env.rb文件即可,我们可以简单地把新方法添加在它里面:

class Rush::Box
 def ip_address
 bash("ifconfig | grep inet | grep -v 127.0.0.1").match(/addr:([\d.]+)/)[1]
 end
end

回到rush,现在通过如下调用就可以打印本地的IP地址:

rush> Rush::Box.new.ip_address
 192.168.1.104

Wiggins已经使得例如启动和停止服务、数据库创建或者iptable规则操作等管理任务变得更加容易:

 [...] netstat -lptn可以指出什么进程在占用某个特定端口,但是却很难和其他操作结合起来。在rush中,你可以这样做:box.processes.each { |p| p.kill if p.listen_port == 3000 }

对于rush的长期目标:

重新实现/usr/bin中的(再加上bash内建的)数千个命令看上去是一个令人难以想象的任务。但是我怀疑其中的大部分基本 上很少使用。一个精心实现的小型子集可以满足其他unix用户们和我80%的需求——尤其是在集群管理领域,这个领域才是rush创建的真正原因。 rush库目前有约1500行代码,它已经可以涵盖大部分主要的文件和进程操作。我认为用10k行左右代码就可以在管理unix系统方面基本上实现我们想 做的事情。

更多关于rush的内容,请访问rush的官方站点或者加入rush的Google群组。需要注意的是RubyForge上的ruSH项目不是我们所说的rush项目,它看上去已经不再更新了。

查看英文原文: Rush - OOP shell in Ruby

相关赞助商

Unix体验中心的目标是为研究、学习和使用各种版本的Unix和类Unix操作系统的技术人员提供的一个线上交流平台,包含翔实的OpenSolaris学习资料。

没有回复

回复

深度内容

Flex与JSON及XML的互操作

平台需要互操作性。在这篇文章中,作者仔细研究了Flex和JSON及XML的互操作性。文章也包含了使用E4X库来将XML映射到图表和表格组件的内容,还演示了如何使用as3core库来解码JSON消息。

用Qi4j进行面向组合编程

本文将简要介绍面向组合编程(COP,Composite Oriented Programming)的概念,展示它如何规避OOP存在的一些问题,并重新点燃使用可重用部件组装领域模型(Domain Model)的希望。

系统开发——新学科,新教育

一门新的计算机学科——“系统开发”,强调人性化、匠艺、设计、创意、创新和新事物的涌现,并建议用被称为“bottega”的工作室替代乏善可陈的教室。

图书聚焦:Visual Studio 2008 揭秘

Mike Snell和Lars Powers用他们最近由Sams出版的新书《Visual Studio 2008揭秘》,试图帮助大家提高开发人员的生产力。本文包括一个下载样章——第10章调试。

BPEL为何不是BPM的圣杯?

Pierre Vigneras在本文中讨论了作为标准之一的BPEL所存在的问题。Pierre先给我们大致介绍了一个简单的并行流程,接着讨论了从业者在试图以一个结构化模型为基础表达非结构化流程时遇到的一系列问题。

基于范型的多语言编程

你是否仔细思考过,为什么人们总在讨论“要正确的语言做恰当的事情”?在这篇文章中,Sadek Drobi向你解释了为什么应该在系统内部混合使用多种语言。

采访与书摘《Pro Web 2.0 Application Development with GWT》

Jeff Dwyer就关于他的新书(《Pro Web 2.0 Application Development with GWT》)、GWT1.5以及创建可搜索的Ajax应用谈了一些他的见解。

时刻准备着,迎接IT业的春天

我们需要设身处地地为客户及客户的业务本身着想,与客户同舟共济。更多创新的思路、产品和模式也同样将为IT业带来新的出路。IT业并不需要坐以待毙,在春天到来之后,市场将会更加繁荣!