写点什么

Rush——Ruby 中的面向对象 shell

  • 2008-02-29
  • 本文字数:1154 字

    阅读完需:约 4 分钟

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

rush> root['/var/'].ls<br></br> //var/<br></br> db+<br></br> lib+<br></br> log+<br></br> run+<br></br> [...]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<br></br> def ip_address<br></br>  bash("ifconfig | grep inet | grep -v 127.0.0.1").match(/addr:([\d.]+)/)[1]<br></br> end<br></br>end回到 rush,现在通过如下调用就可以打印本地的 IP 地址:

rush> Rush::Box.new.ip_address<br></br> 192.168.1.104Wiggins 已经使得例如启动和停止服务、数据库创建或者 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

2008-02-29 20:202440
用户头像

发布了 80 篇内容, 共 23.2 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

2024年企业选择堡垒机指南

行云管家

网络安全 数据安全 云安全 堡垒机 企业数据安全

2024年带大家一起深入了解堡垒机功能以及作用

行云管家

网络安全 数据安全 云安全 堡垒机

软件测试|人工智能:测试开发的新宠儿

霍格沃兹测试开发学社

软件测试|探索多态在程序设计中的奇妙应用与巧妙技巧!

霍格沃兹测试开发学社

如何实现一个高扩展、可视化低代码前端框架

互联网工科生

低代码 前端框架 JNPF

软件测试的发展现状与未来趋势

测试人

软件测试

测试开发高薪私教线下周末班试听精彩内容回顾

测吧(北京)科技有限公司

测试

火山引擎ByteHouse:分析型数据库如何设计列式存储

字节跳动数据平台

数据库

Wireshark的捕获过滤器

小齐写代码

超越常规!探索多态在程序设计中的奇妙应用与巧妙技巧!

测试人

软件测试

素数检验---跨越2000年的人类智慧

fliter

苹果电脑 电子邮件客户端 Mimestream for Mac

Rose

Mac软件 Mimestream Mac破解版 Mimestream 下载 邮件客户端 Gmail邮箱

超越常规!探索多态在程序设计中的奇妙应用与巧妙技巧!

测吧(北京)科技有限公司

测试

Walrus 实用教程|Walrus + Gitlab,打通CI/CD 自动化交付!

SEAL安全

开源 gitlab CI/CD Walrus

年度重磅更新!“AI+可视化拖拽”实现个性化页面极速开发!组件设计器即将上线!

优秀

AI 网站开发 组件化开发

如何在网页上下载高质量视频和音频文件?推荐使用PullTube for Mac在线视频下载器

Rose

Mac视频下载器 PullTube使用教程 PullTube mac

如何实现一个百万亿规模的时序数据库,百度智能云 BTS 架构解析和实践分享

百度Geek说

架构 时序数据库 百度智能云

测试开发高薪私教线下周末班试听精彩内容回顾

霍格沃兹测试开发学社

ETL怎么实现文件处理

谷云科技RestCloud

ETL 数据集成 文件处理

通过人力资源规划,实现企业财务计划与分析的转型

智达方通

全面预算 财务规划与分析 人力资源规划

GraphicConverter 12 :简单好用的图片浏览编辑器

Rose

GraphicConverter 12中文 GraphicConverter破解 Mac图片编辑器

LED屏模组偏色怎么办?

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

一次因PageHelper引起的多线程复用问题的排查和解决 | 京东物流技术团队

京东科技开发者

Boxy SVG v4.23.2免激活版 mac矢量图编辑器 支持m1/m2

Rose

苹果软件下载 矢量图形编辑软件 Boxy SVG破解版 Boxy SVG mac下载

政务云相关名词解释看这里!

行云管家

云计算 云管平台 云管理 政务云

人工智能:测试开发的新宠儿

测吧(北京)科技有限公司

测试

小程序定制开发:解析定制化移动应用的未来

天津汇柏科技有限公司

小程序 小程序开发 小程序开发,软件开发

Rush——Ruby中的面向对象shell_Ruby_Mirko Stocker_InfoQ精选文章