写点什么

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

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

关注

评论

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

低代码开发到底有什么价值?

代码生成器研究

aPaaS 低代码平台的模式是什么?

代码生成器研究

GPT-4V新玩法登顶GitHub热榜,随手一画就能生成网页!web开发者:感受到了威胁

Openlab_cosmoplat

null 不好,我真的推荐你使用 Optional

越长大越悲伤

Java

桌面云一体机如何安装应用软件?

青椒云云电脑

桌面云一体机

「Flink+Hologres 搭建实时数仓」训练营重磅开启

Apache Flink

大数据 flink 实时计算

Python连接es笔记一之连接与查询es

Hunter熊

Python elasticsearch Elasticsearch-dsl

探索亚马逊大语言模型:开启人工智能时代的语言创作新篇章

熬夜磕代码、

亚马逊

现在的市场,我们怎么选择属于自己的一级币

币离海

zkSync 一级市场 Gensyn enemy

鲜衣怒马少年时|GreptimeDB 开源一周年回顾

Greptime 格睿科技

数据库 开源 基础软件 时序数据库

如何使用 NFTScan NFT API 在 Linea 网络上开发 Web3 应用

NFT Research

NFT\ NFTScan API 文档

SQL 查询优化指南:SELECT、SELECT DISTINCT、WHERE 和 ORDER BY 详解

小万哥

MySQL 数据库 sql 程序员 后端

当代企业的数字安全,能“脆皮”到什么程度?

脑极体

AI

蓝牙耳机仓设计的单芯片解决方案

芯动大师

2023广告节:原生场景结合科技美学,鲸鸿动能赋能企业长效增长

最新动态

开发者工具|15款音视频开发者必备实用工具,看看你用过几个?

音视频开发_AIZ

音视频开发 工具集 音视频技术

FFA 2023|第六届 Flink Forward Asia 峰会议程正式上线!

Apache Flink

大数据 flink 实时计算

低代码开发前景如何,大家都真的看好低代码开发么?

代码生成器研究

低代码的优势体现在哪里?

代码生成器研究

基于ChatGPT自动化测试项目生成方案

lklmyy

测试框架 AIGC

亚马逊云EC2的存储

孤虹

Amazon EC2 亚马逊云

低代码和无代码有什么不同?

代码生成器研究

“低代码”是什么?

代码生成器研究

虚拟化有哪些好处?为什么要使用虚拟云桌面?

青椒云云电脑

桌面云 云桌面

业务流程图用什么软件画?这10款流程图软件,效率快到飞起!

彭宏豪95

流程图 画图软件 在线白板 流程图绘制工具 绘图软件

11月18日,华为负一屏5万张“大额神券”等你抢!当天领取当天用

最新动态

低代码平台或零代码平台靠谱吗?

代码生成器研究

Ethereum WebSocket接口实践

FunTester

从智能到“致用”,安第斯大模型与潘塔纳尔系统的一次会师

脑极体

大模型

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