写点什么

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:202247
用户头像

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

关注

评论

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

容器 & 服务:Docker 应用的 Jenkins 构建(二)

程序员架构进阶

容器 服务化 七日更 28天写作 2月春节不断更

CIO/CTO必读 | 数字转型时代,企业存储支出知多少

焱融科技

存储 焱融科技 CIO 存储成本 IT成本

基于WASM的无侵入式全链路A/B Test实践

韩陆

滴滴开源 LogicFlow:专注流程可视化的前端框架

滴滴技术

逆向思维:从小厂到面试大厂,这份学习笔记助我快速成长,实现高薪岗位

Java架构之路

Java 程序员 架构 面试 编程语言

Docker 镜像加速教程

硅基新手村

Docker 云原生

网格量化交易机器人系统开发|网格量化交易机器人软件APP开发

系统开发

数字货币量化交易APP开发|数字货币量化交易系统软件开发

系统开发

【科技改变生活,区块链改变世界】欧科云链徐明星的区块链密码朋克世界

CECBC

区块链

敏捷业务实践之计划游戏

Teobler

项目管理 敏捷 敏捷开发 敏捷开发管理

滴滴Kafka服务体系建设,实战干货都在这里!

滴滴云

大数据 Obsuite 滴滴Kafka

首全网发!2021最新版美团面经刷题笔记,已霸榜GitHub

比伯

Java 编程 架构 面试 程序人生

备战金三银四,阿里,腾讯春招面试题解析,含Java岗988道题分享

Java 架构 面试

币管家软件开发|币管家系统APP开发

系统开发

双指针高频面试题:三数之和的「升级篇」...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

小步发布、验收测试和完整团队

Teobler

项目管理 敏捷 敏捷开发 工程实践 敏捷开发管理

区块链技术在各国政府管理中的运用

CECBC

区块链

分享我的2021京东4面面经,送给备战金三银四的你

Java架构之路

Java 程序员 架构 面试 编程语言

insert、update、delete注入总结

Cc.

网络安全

应云而生,幽灵的威胁 - 云原生应用交付与运维的思考

阿里巴巴云原生

云计算 容器 微服务 云原生 k8s

“他者”德意志(一):“进窄门”的德国AI

脑极体

真实!对比(阿里/京东等一线大厂)Java面试真题,自己把自己菜哭了

Java架构之路

Java 程序员 架构 面试 编程语言

源码解析--skywalking agent插件加载流程

cloudcoder

Skywalking 源码剖析 插件设计

利用xml实现数据传输

天狼

又长又细,万字长文带你解读Redisson分布式锁的源码

数据库 redis 架构

产业数字金融的数字化与生态化

CECBC

金融

一名叫谙忆的程序员在2021年的具体安排《打工人的那些事》

谙忆

瓦力量化交易机器人软件开发|瓦力量化交易机器人APP系统开发

系统开发

卓越级!浪潮云通过可信云云管理服务能力评估

OpenYurt 如何 “0 侵入” 攻破云边融合难点

阿里巴巴云原生

云计算 Serverless 容器 云原生 边缘计算

华为发布智能云网“五个一”新能力,助力运营商完成云与网的价值归一

脑极体

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