有什么基于对象的shell?

时间:2010-07-19 13:27:51

标签: shell oop powershell pipe

我打算编写一个面向对象的shell(基于Python)。我已经有很多想法了。但在我要实现它之前,我想通过一些现有的shell来启发我。

我基本上是面向对象的意思:

  • 参数不仅仅是一个字符串数组,而是一个对象数组。
  • 返回值也是一个对象。
  • 不仅有stdin,stdout和stderr,还有任何可能数量的命名流,它们可以是某些类型(不仅仅是字节流)。

我已经读过Windows PowerShell有点像(基于.Net)。虽然我正在搜索一些现有的Linux / MacOSX shell。

当然也有IPython,但它并不是真的打算作为Unix shell,即管道周围的东西非常复杂。

3 个答案:

答案 0 :(得分:2)

微软的Powershell。默认安装在Windows 7& Server 2008,可以安装在XP& Vista系统。这是一个非常好的工具,热身有点长,但一旦完成它就非常有用。

我真正喜欢的功能是过滤:

 ls | where-object { $_.size -eq 0 }

谁可以用紧凑的形式重写

 ls | ? { $_.size -eq 0 }

和转换(后面是紧凑的形式):

 ls | foreach-object { $_.name -replace "\folderName","daba" }
 ls | % { $_.name -replace "\folderName","daba" }

你也可以在shell语言中轻松创建管道过滤器,这是一个非常简洁的功能。

function concat()
{
    Begin { $rez = ""; }
    Process { $rez = $rez + $_ }
    End { $rez }
}


ls | % { $_.name } | concat

最后一个表达式列出所有文件,提取文件名并将它们连接在一个字符串中(可能是一些cmdlet,但我不记得名字)。

powershell的另一个重要部分是内省,你可以从命令行查询你的对象proprety / methods:

ls | get-member

使用新对象非常有用,它比python中的dir()更具描述性

答案 1 :(得分:0)

也许你可能想看看Pash

它是PowerShell的开源实现,适用于其他平台。出于教育目的和灵感,它可能是有用的。不幸的是,据我所知,这个有希望的项目尚未开发。

答案 2 :(得分:0)

根据shell comparison list on Wikipedia,唯一能够做到这一点的现有shell是MS PowerShell和IPython(如果算作命令shell),IPipe extension用于管道。

如果您只计算真正的跨平台解决方案,则无法使用MS PowerShell。它有Pash端口(感谢Roman注意到它),虽然它不完整,因此不太可用。

所以,回答我的问题:还没有这样的事情。