网易首页 > 网易号 > 正文 申请入驻

这个Shell把Ruby写进了每一行命令

0
分享至

Shell脚本和Ruby代码终于不用互相嫌弃了。

有个叫Rubish的新项目,用纯Ruby写了一个Unix Shell。它的思路很直接:把Shell语法解析编译成Ruby代码,然后交给Ruby虚拟机执行。开发者说,Rubish完整支持bash的所有功能,语法层面完全兼容——你现有的bash脚本不用改一行就能跑。如果发现有跑不通的,他们当bug处理。


但这不只是"用Ruby重写了bash"那么简单。Rubish的设计核心是让Shell命令和Ruby代码能无缝混着写。你可以在脚本里直接调用Ruby的块、迭代器和各种库,反过来也能在Ruby表达式里用Shell变量。


装起来不麻烦。Mac用户可以用brew:

brew tap amatsuda/rubish
brew install --HEAD rubish

或者从源码跑:

git clone https://github.com/amatsuda/rubish.git
cd rubish
bundle install
bundle exec exe/rubish

项目还提供了一个bin/rubish的小启动器,能自己找可用的Ruby环境——它会按顺序探测~/.rbenv/shims/ruby、/opt/homebrew/bin/ruby、/usr/local/bin/ruby和系统Ruby,也认$RUBY环境变量。适合当登录Shell用,或者从.app bundle里启动,那种PATH极简的场景。

用起来和常规Shell差不多。交互模式直接敲rubish,单条命令用rubish -c 'echo hello',跑脚本就rubish script.sh。想设成默认登录Shell也行,按标准流程加到/etc/shells然后chsh就行。

真正有意思的是语法层面。条件判断可以用Ruby表达式,包在花括号里,Shell变量会自动绑定成局部变量:

COUNT=5
if { count.to_i > 3 }
echo 'count is greater than 3'
end

循环也一样:

while { count.to_i > 0 }
echo $COUNT
COUNT=$((COUNT - 1))
done


命令调用有两种风格。传统的Unix空格分隔照样用,ls -la没问题。同时支持Ruby的方法调用语法,ls('-la')等价。参数按位置传,cat(file.txt)、grep('pattern', file.txt)都行。

管道被重新设计成了方法链。ls().sort就是ls | sort,ls().sort.uniq对应三层管道。关键是链的开头必须用括号调用、数组字面量或者块来"激活"——一旦进入链式上下文,后面的方法可以裸写。这么设计是因为bare cmd.method有歧义,可能是路径或带点号的文件名,括号能消除歧义。

所以cat(file.txt).grep(/error/)等价于cat file.txt | grep error,而且这里grep的参数是Ruby正则。更复杂的例子:

ls.select { it.end_with?('.rb') }.each { |f| puts f.upcase }

这行里select和each都是Ruby迭代器,it是Ruby 3.4引入的隐式块参数。整条链从Shell命令开始,中间用Ruby方法处理,最后Ruby输出。

迭代器方法.each、.map、.select、.detect都能接块,逐行处理命令输出:

ls.each { |f| puts f.upcase }
cat(file.txt).map { |line| line.strip }
ls.select { it.end_with?('.rb') }

还有条特殊规则:任何以大写字母开头的行,直接当Ruby代码执行。这意味着类定义、方法调用、随便什么Ruby表达式,都能直接写在脚本里。

对写惯了Ruby的人来说,这套设计省掉了很多上下文切换的成本。不用在"Shell思维"和"Ruby思维"之间来回切,一套语法管到底。对运维脚本、自动化流程这种Shell和Ruby本来就会混用的场景,或许能减少一些胶水代码。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
女生为秀恩爱,偷偷在男友博士论文里编造了第 52 条参考文献,网友:博士男友秒变硕士前男友

女生为秀恩爱,偷偷在男友博士论文里编造了第 52 条参考文献,网友:博士男友秒变硕士前男友

生物学霸
2026-06-02 17:13:59
2亿和解费?她是遇上杀猪盘了吧!

2亿和解费?她是遇上杀猪盘了吧!

BenSir本色说
2026-05-31 22:05:15
你无意中发现了不得的事?网友:大保健里遇见嫂子

你无意中发现了不得的事?网友:大保健里遇见嫂子

夜深爱杂谈
2026-05-28 07:59:33
北欧海盗来了,哈兰德发布维京装束风格自拍为世界杯出征造势

北欧海盗来了,哈兰德发布维京装束风格自拍为世界杯出征造势

懂球帝
2026-06-02 20:28:06
“小心!右边女儿是鸳鸯眼!”家长晒两个女儿的不同面相,引热议

“小心!右边女儿是鸳鸯眼!”家长晒两个女儿的不同面相,引热议

妍妍教育日记
2026-06-01 20:02:17
又一起吃他汀猝死!医生再三强调:夏季吃他汀的人,要警惕这4点

又一起吃他汀猝死!医生再三强调:夏季吃他汀的人,要警惕这4点

健康科普365
2026-06-01 21:55:03
韩国“鸟叔”已被移交检察机关

韩国“鸟叔”已被移交检察机关

都市快报橙柿互动
2026-06-02 12:04:32
为什么家里不要随便装监控?很多人都不知道内情,看完涨知识了

为什么家里不要随便装监控?很多人都不知道内情,看完涨知识了

小俊分享
2026-06-02 12:07:15
吉尔金预测乌军可能在6月渡河反攻赫尔松

吉尔金预测乌军可能在6月渡河反攻赫尔松

名人苟或
2026-06-02 15:08:37
52岁卡纳瓦罗率队0-2不敌世界杯东道主,中亚劲旅3连胜终结

52岁卡纳瓦罗率队0-2不敌世界杯东道主,中亚劲旅3连胜终结

侧身凌空斩
2026-06-02 11:09:47
闹大了!中方驱逐美记者后,不到24小时美回击,吊销新华记者许可

闹大了!中方驱逐美记者后,不到24小时美回击,吊销新华记者许可

小陆搞笑日常
2026-06-02 19:51:48
乌克兰首都基辅等地遇袭 已致100多人伤亡

乌克兰首都基辅等地遇袭 已致100多人伤亡

中国网
2026-06-02 16:56:32
为什么好莱坞非常尊重成龙,却看不起李连杰?

为什么好莱坞非常尊重成龙,却看不起李连杰?

闲人电影
2026-06-02 17:00:20
《歌手2026》公布首波助演嘉宾名单:阿云嘎、Jony J、海来阿木

《歌手2026》公布首波助演嘉宾名单:阿云嘎、Jony J、海来阿木

喜欢历史的阿繁
2026-06-02 20:52:23
浙江爸爸带1岁儿子去菜场买菜,惨案发生!儿子逗玩店铺笼中兔子,食指几乎被咬断……法院判决:监护人担主责

浙江爸爸带1岁儿子去菜场买菜,惨案发生!儿子逗玩店铺笼中兔子,食指几乎被咬断……法院判决:监护人担主责

环球网资讯
2026-06-02 18:05:18
有一种后悔叫买了“高层的2楼”,不好住卖不掉,彻底成为不动产

有一种后悔叫买了“高层的2楼”,不好住卖不掉,彻底成为不动产

装修秀
2026-04-23 11:15:03
看球赛的美女,身材真好

看球赛的美女,身材真好

蓝色海洋009
2026-05-25 20:36:25
东北华北等地有强对流 南方地区将有较强降水

东北华北等地有强对流 南方地区将有较强降水

中国气象局
2026-06-02 08:08:07
中国股市唯一赚钱最快思路:持有一只股,保留30%仓位,长期做T!

中国股市唯一赚钱最快思路:持有一只股,保留30%仓位,长期做T!

股经纵横谈
2026-05-15 19:18:34
NBA名记爆料:亚历山大私下“施压”雷霆管理层,要求留下多尔特

NBA名记爆料:亚历山大私下“施压”雷霆管理层,要求留下多尔特

夜白侃球
2026-06-02 12:58:38
2026-06-03 00:03:00
我是一个粉刷匠2
我是一个粉刷匠2
有态度网友ytd
4407文章数 44关注度
往期回顾 全部

科技要闻

烧掉千亿后,美团、阿里、京东谁先止血?

头条要闻

演员魏宗万去世 曾在94版《三国演义》中饰演"司马懿"

头条要闻

演员魏宗万去世 曾在94版《三国演义》中饰演"司马懿"

体育要闻

1米74的业余联赛替补,在英超踢中卫

娱乐要闻

奚梦瑶何猷君补办婚礼超幸福

财经要闻

智元和宇树的“暗战”愈演愈烈

汽车要闻

星途神秘新车轮廓曝光 又一款性能SUV要来了?

态度原创

游戏
教育
时尚
本地
军事航空

期待!GTA6第三支预告片有望亮相索尼6月3日发布会

教育要闻

“你知道几号高考吗?”18岁纹身女孩的生日美照,诠释了物以类聚

蓝色系下装看着清爽不闷,裤子、裙子都凉快,随便穿都不出错

本地新闻

用剪纸的方式,打开江苏扬州

军事要闻

伊朗媒体新发布最高领袖照片

无障碍浏览 进入关怀版