![面向对象的 Unix shell 至少具有 LINQ 功能?](https://linux22.com/image/20496/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%9A%84%20Unix%20shell%20%E8%87%B3%E5%B0%91%E5%85%B7%E6%9C%89%20LINQ%20%E5%8A%9F%E8%83%BD%EF%BC%9F.png)
嗯,“至少”更确切地说——这将是完美的;-) 有类似的问题——*nix 的面向对象 shell。对我来说,与 bash 的相似性不是问题。
我想要一些简单的 OOP 加 LINQ。目前我只知道http://www.scsh.net/但因为语法有点矫枉过正。
也许我会通过例子向你展示我的意思:
run("ls ./").foreach(it => println(it.filesize))
或者
run("find -r *.jpg") \
.filter(it => it.datetime<today.adddays(-2)) \
.foreach(it => run("gimp ${it.filename}"))
还有比 scsh 更接近这个“梦想 shell”的东西吗?
我为什么要问?因为我编写的程序越多,我就越倾向于函数式语言(C++ -> C#+LINQ -> Scala -?-> Clojure),昨天我不得不在 bash 中编写简单的 find+print 循环,这很痛苦。男人很容易被所有功能性的东西宠坏;-D。
答案1
rush
看起来很相似,例如允许你写
processes.filter(:cmdline => /mongrel_rails/).kill
或者
myproj['**/*.rb'].search(/^\s*class/).lines.size
但看起来相当死的。最后,我会选择只使用一些脚本语言来执行 shell 任务(而不是相反),例如,如中所述《使用Python创建UNIX命令行工具》。
(编辑还有一个正在积极开发的面向对象的 shell,尽管与rush
s 的概念有很大不同,oh
.)
答案2
您必须为 LINQ 内容编写自己的对象,但将 bash 扩展到 OOP 非常容易。查看https://github.com/uudruid74/bashTheObjects