写点什么

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

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

关注

评论

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

直播预告 | 一体化智能可观测平台如何保障电商节大促

博睿数据

可观测性 智能运维 博睿数据 电商节

世界500强企业是如何开展财务共享工作的?

用友BIP

财务共享

亚信科技AntDB数据库荣获赛宝优选信创优秀解决方案奖

亚信AntDB数据库

AntDB AntDB数据库 企业号 6 月 PK 榜

数字经济快速发展下企业需要什么样的数智平台?

用友BIP

企业数智化 数智平台

苹果WWDC 2023发布会总结

楚少AI

wwdc WWDC 2023 苹果wwdc2023

【JavaScript】手写Promise

不叫猫先生

JavaScript Promise 6 月 优质更文活动

GaussDB(DWS)查询过滤器原理与应用

华为云开发者联盟

数据库 华为云 华为云开发者联盟 企业号 6 月 PK 榜

深入理解注解驱动配置与XML配置的融合与区别

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

vue2.x与vue3.x中自定义指令详解

不叫猫先生

Vue 自定义指令

阿里云丁宇:云上开发成为主流,Serverless 定义新范式

阿里巴巴云原生

阿里云 Serverless 云原生

对编程语言中错误处理机制的思考

宇宙之一粟

错误处理 6 月 优质更文活动

旺链科技赋能泳池卫士守护人身安全

旺链科技

区块链 泳池安全 泳池卫士

【云原生】Docker的基本使用方法与优势

不叫猫先生

Docker 6 月 优质更文活动

数智人力:现代企业解决人才短缺的新途径

用友BIP

数智人力

【热点追踪】从价值到架构,走近全新升级的阿里云 Serverless 容器服务 ASK

阿里巴巴云原生

阿里云 Serverless 容器 云原生

前端内存泄漏详解

不叫猫先生

内存泄露 6 月 优质更文活动

一份配置轻松搞定表单渲染,配置式表单渲染器在袋鼠云的实现思路与实践

袋鼠云数栈

大数据 企业号 6 月 PK 榜

中企出海困难重重?海外税务数字化解决方案来支招!

用友BIP

中企出海

PCB板的Mark点设计对SMT重要性

华秋PCB

工具 电路 PCB SMT PCB设计

Vue项目中实现ElementUI按需引入

不叫猫先生

Vue Element UI 按需加载 6 月 优质更文活动

大学共享电单车合作投放准备工作

共享电单车厂家

共享电动车厂家 共享电单车投放 共享电动车合作 校内共享电动车

前端AST详解,手写babel插件

不叫猫先生

6 月 优质更文活动

中企出海,数智人力重构企智人效的人才供应体系

用友BIP

人力资源 中企出海 数智人力

Vue3项目中Pinia状态管理工具的使用

不叫猫先生

Vue Pinia 6 月 优质更文活动

数智人力领域的“chat GPT”,让人才发现更简单更智能

用友BIP

数智人力

软件测试丨学习笔记Allure2报告中添加用例链接、用例分类

测试人

程序员 软件测试 测试开发 测试用例 Allure

顶象发布《车企App安全研究白皮书》,剖析车企App两大风险

说山水

vue2.x,vue3.x使用provide/inject注入区别

不叫猫先生

Vue 6 月 优质更文活动

【Netty】「NIO」(三)剖析 Selector

sidiot

Java 后端 Netty 6 月 优质更文活动

聚焦数智人力,让员工“跳槽”不再尴尬!

用友BIP

人力资源 数智人力

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