50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

5000字谈普通人如何用AI扩大影响力

阿星AI工作室

AI 产品经理 AIGC 超级个体

巡检任务管理系统(源码+文档+讲解+演示)

深圳亥时科技

技术文章

qife122

人工智能 openai

机器学习赋能计算机嗅觉革命:Osmo的气味图谱突破

qife122

机器学习 数字嗅觉

火山引擎 MCP 安全架构与实践

Lily

WPS 灵犀语音助手:AI 对话处理文档;通义 Qwen3-MT:支持 92+语言互译的 AI 翻译引擎丨日报

声网

由挑战走向未来:无线网络如何迎接智能时代?

脑极体

AI

YashanDB SIGN函数

YashanDB

数据库

YashanDB SIN函数

YashanDB

数据库

社区版 2025.7 | CQ-Mate V1.3发布啦!

BinTools图尔兹

数据库管理工具 数据库审计 社区版 流量分析系统 免费软件下载

智慧工地实践案例:用数智应用破解土石方工程效率与成本难题

袋鼠云数栈

AI 数字化转型 云计算, 数字化解决方案 大数据计算

Java中什么是类加载?类加载的过程?

量贩潮汐·WholesaleTide

Java

使用 Databend Cloud 归档 OceanBase 数据数据库

Databend

基于Dify构建本地化知识库智能体:从0到1的实践指南

知识浅谈

dify

“多模态数据融合技术创新与落地实战”活动在数新智能圆满收官,产学研共探智能时代新路径

数新网络官方账号

基于深度学习的YOLO框架的道路裂缝智能识别系统【附完整源码+数据集】

程序员Geek

人工智能

AI编程神器!Trae+Claude4.0 简单配置 让HarmonyOS开发效率飙升 - 坚果派

万少

HarmonyOS NEXT

千万级的大表如何新增字段?

电子尖叫食人鱼

大数据

加密货币硬件钱包安全使用的10条黄金法则

qife122

区块链 加密货币安全

亚马逊机器人如何用多模态识别技术取代条形码

qife122

机器人技术 自动化识别

Maven中的这些坑,99%的人不知道!

不在线第一只蜗牛

Java 开发

【苍狮技术团队】速看!Linux离线安装Docker、Docker-Compose竟如此简单?

苍狮技术团队

国际标准组织共聚,智源推动全球AI开源与国际标准双轮驱动人工智能普惠化发展

智源研究院

javax.security.auth.login.LoginException: No CallbackHandler available to garner authentication info

刘大猫

人工智能 数据挖掘 算法 数据分析 LoginException

网络嗅探工具Intercepter-NG的技术内幕与黑客文化变迁

qife122

网络安全 黑客文化

黑龙江等保测评:三级系统测评成本优化策略

等保测评

智源研究院发布数据魔方,以智能化自定义方式重构模型训练数据供给范式

智源研究院

DIFC 2025年上半年业绩助推迪拜经济愿景

财见

非凸科技受邀出席第九届AI&FOF投资创新发展论坛

非凸科技

Hologres V3.1版本发布,Serverless型实例从零开始构建OLAP系统

阿里云大数据AI技术

人工智能 机器学习 大数据 数据分析 hologres

基于 Nacos + Higress 的 MCP 开发新范式,手把手教程来了!

阿里巴巴云原生

阿里云 云原生 Higress

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