阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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

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

关注

评论

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

Redis主从复制集群及数据异常丢失恢复思路

jiangxl

redis'

《SQL必知必会》读书笔记

懒时小窝

数据库 sql

深度剖析OpenHarmony应用/服务的逻辑结构

Anna

OpenHarmony

关于「应变力」这个超能力|ONES 人物

万事ONES

管理

Java 邮件发送

Java 邮件 4月月更

pinpoint插件开发之一:牛刀小试,调整gson插件

程序员欣宸

Java web 4月月更 Pinpoint

一文搞明白Redis中两种持久化机制RDB和AOF

jiangxl

redis'

Android C++系列:函数知识知多少

轻口味

c++ android 4月月更

web前端培训懒加载对 Web 性能的影响

@零度

前端开发 懒加载

参赛必看,2022语言与智能技术竞赛赛题任务解读直播!

百度大脑

Java 如何从一个 List 中随机获得元素

HoneyMoose

浅谈C#字符串构建利器StringBuilder

yi念之间

C# StringBuilder

某意大利小哥,竟靠一个缓存中间件直接封神?

沉默王二

redis

美好教育,无处不在 | 拓维信息携手开鸿智谷重磅发布教育在鸿OS发行版

拓维信息

操作系统 OpenHarmony OpenHarmony 3.1 Release

金蝶云·苍穹峰会震撼来袭

金蝶云·苍穹

OpenHarmony啃论文计划-elf文件格式介绍

Anna

OpenHarmony

浅谈C#可变参数params

yi念之间

C# params

OpenHarmony技术日探讨教育发展,聚焦开源人才培养

OpenHarmony开发者

OpenHarmony

OpenHarmony应用开发之全局配置参数解析

Anna

OpenHarmony

赛事解析|乒乓球时序动作定位大赛亚军方案分享

百度大脑

一站式内容创作助手 智能创作平台生成正式商用

百度大脑

浅谈云上攻防——Etcd风险剖析

腾讯安全云鼎实验室

安全攻防 网络安全

了解HTTP的基本历史及知识

CRMEB

OpenHarmony 设备开发环境搭建 / 源码获取 / 编译 / 烧录

Anna

OpenHarmony

百度天工AIoT打造农业种植方案,用数字经济助力建设农业新模式

百度大脑

「质量三人行之不止测试」直播问题解答

BY林子

软件测试 职业发展 质量赋能 测试转型 质量内建

密码基础设施提供商三未信安加入龙蜥社区

OpenAnolis小助手

合作伙伴 龙蜥社区 CLA 三未信安 密码基础设施

【直播回顾】OpenHarmony知识赋能第五期第二课——成为社区达人

OpenHarmony开发者

OpenHarmony 社区贡献

怎么写帮助文档?产品人看过来

小炮

帮助中心

高精度轻量级图像分割SOTA模型PP-LiteSeg重磅开源!

百度大脑

新冠疫情防控背后有哪些鲜为人知的技术?

DS小龙哥

4月月更

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