Unix 相当于 PowerShell?

Wim*_*nen 23 shell

当复杂的 shell 命令涉及使用AWK解析文本输出时,我总是觉得很尴尬。基本上,我们将结构化数据转换为文本,然后再次解析文本以返回结构化数据。

PowerShell是一个 Windows 外壳程序,它通过允许您在外壳程序命令之间使用管道输入对象而不仅仅是文本来避免该问题。

是否有任何基于对象而不是基于文本的 Unix shell,例如 PowerShell?

wzz*_*zrd 25

不,情况正好相反。没有勺子^H^H^H结构化数据。只有文字。

Unix 哲学的很大一部分基于输出文本和接受文本作为输入的思想。您可能需要考虑阅读“ The Art of Unix Programming ”,它对此有很好的解释。

不要误会我的意思:我理解你的意思,我知道你想达到什么目的。Ruby 和 Python 的交互式解释器之类的东西可以作为 shell 使用,但它们对基本任务不如 Bash 友好。例如,尝试更改目录。

此外,在 shell 中使用对象并不是全部。如果只有你的shell支持这个,在 Unix 上,你会不知所措。所有标准的 Unix 文本操作工具都必须改变,例如 grep、awk、sed 等。

我想几年前就有人尝试过创造这样的东西,但我不记得名字了,而且我已经很长时间没有听说过它了。它可能不会起飞。

  • +1“不要试图弯曲勺子,那是不可能的。而只是尝试了解真相......没有勺子。” 与其说是文本即界面,不如说是*数据流* 作为界面。对象很适合编程,但有时它们会变成一个小小的监狱,让你的思绪... (3认同)
  • 有趣的是,用数据对象流替换文本流(或实际上是字节流)并不会违背书中阐述的一般原则。它甚至似乎更适合“代表规则”。只是 unix 选择了文本流作为程序之间的接口。 (2认同)
  • zsh > bash。我的意见,但真的如果你没有尝试过 zsh 你应该 (2认同)
  • @WimCoenen,传送“结构化数据”意味着每个人和蒂莉阿姨都必须同意“结构”是什么。甚至像`ls(1)`这样的东西。完全没用。 (2认同)
  • @vonbrand PowerShell 正是这样做的。可以就公共属性/参数名称达成一致。不可能像 ps 和 ls 输出那样就“表中的列位置”达成一致。如果属性/参数名称不匹配,您仍然可以使用 foreach,就像在 Unix 中必须使用 awk + ​​xargs 一样。 (2认同)

小智 10

实际上有一个名为Pash的项目旨在实现 PowerShell(在 Mono 之上),但它似乎已经停滞不前。

  • 我们死而复生了:https://github.com/JayBazuzi/Pash,https://twitter.com/PashProject (4认同)
  • unix 黑客花时间在基于微软的项目上 = 那又是蚂蚁和蚱蜢 (2认同)

小智 7

PowerShell 于 2016 年开源。从那时起,它变得越来越多平台。GitHub 上提供了源代码,因此可以为许多类 UNIX 系统安装软件包。