¿Unix equivalente a PowerShell?

21

Siempre me ha resultado incómodo cuando los comandos de shell complejos implican analizar la salida de texto con AWK . Básicamente, estamos convirtiendo datos estructurados en texto, luego analizamos el texto nuevamente para volver a los datos estructurados.

PowerShell es un shell de Windows que evita ese problema al permitirle canalizar objetos escritos entre comandos de shell en lugar de solo texto.

¿Hay shells de Unix que estén basados ​​en objetos en lugar de texto, como PowerShell?

Wim Coenen
fuente

Respuestas:

24

No, es al revés. No hay cuchara ^ H ^ H ^ H datos estructurados. Solo hay texto.

Una gran parte de la filosofía de Unix se basa en la idea de generar texto y aceptar texto como entrada. Es posible que desee considerar leer " El arte de la programación de Unix ", que tiene una buena explicación al respecto.

No me malinterpretes: entiendo tu punto y sé a qué estás tratando de llegar. Hay cosas como los intérpretes interactivos de Ruby y Python, que se pueden usar como shell, pero no son tan amigables para las tareas básicas como lo es Bash. Intente y cambie el directorio, por ejemplo.

Además, el uso de objetos en un shell no es todo eso. Si solo su shell admite esto, en Unix, estaría perdido. Todas las herramientas estándar de manipulación de texto de Unix tendrían que modificarse, como grep, awk, sed, etc.

Creo que ha habido un intento de crear algo como esto hace unos años, pero no recuerdo el nombre y no he escuchado sobre él en mucho tiempo. Probablemente no va a despegar.

wzzrd
fuente
2
Curiosamente, reemplazar las secuencias de texto (o en realidad, las secuencias de bytes) por secuencias de objetos de datos no iría en contra de los principios generales formulados en el libro. Incluso parece jugar mejor con la "regla de representación". Es solo que Unix ha elegido flujos de texto como la interfaz entre programas.
Wim Coenen
1
Pero por 'objeto de datos' ¿te refieres a un objeto real de Python / Ruby / C ++ o algo así como una estructura C?
wzzrd
3
+1 "No intentes doblar la cuchara, eso es imposible. Solo trata de darte cuenta de la verdad ... no hay cuchara". No es tanto texto como una interfaz, sino flujos de datos como una interfaz. Los objetos son buenos para la programación, pero a veces se convierten en una pequeña prisión pequeña en la que pensar ...
Avery Payne
2
zsh> bash. Mi opinión, pero realmente si no has probado zsh deberías
xenoterracide
2
@WimCoenen, el envío de "datos estructurados" significa que todos y la tía Tillie tienen que estar de acuerdo en qué es la "estructura". Incluso cosas como ls(1). Completamente inutil.
vonbrand
10

En realidad, hay un proyecto llamado Pash que tiene como objetivo implementar PowerShell (además de Mono), pero parece haberse estancado.

Mark Probst
fuente
2
los piratas informáticos de Unix pasan tiempo en proyectos basados ​​en Microsoft = esa es la hormiga y el saltamontes de nuevo
ixtmixilix
44
Regresamos de la muerte: github.com/JayBazuzi/Pash , twitter.com/PashProject
Jay Bazuzi
4

Hay un proyecto, cuyo objetivo comparte similitud con PowerShell: Hotwire . Combina sh normal con secuencias de comandos de python y entorno de ventana / gráfico. Podrías echarle un vistazo.

Se basa en una tubería orientada a objetos que puede extender con sus propios objetos envolviendo programas existentes o usando bibliotecas de Python.

elmarco
fuente
1
¡Ese es el proyecto del que estaba tratando de recordar el nombre! Última confirmación en troncal: hace dos años ...
wzzrd
4

PowerShell se convirtió en código abierto en 2016. Desde entonces, se ha vuelto cada vez más multiplataforma. El código fuente está disponible en GitHub y también lo están los paquetes de instalación para varios sistemas similares a UNIX.

Tomász
fuente
1

Creo que podría lograr la mayor parte de eso escribiendo un montón de guiones interpretados (o compilados), luego invocandolos dentro del intérprete, que devolverá o preservará sus objetos, etc. si lo desea.

Puede hacer esto al menos en Ruby, Perl, Python, Haskell (p. Ej., GHCi), JavaScript (p. Ej., Node.js), Matlab y, ciertamente, en otros idiomas ...

Kevin Cantu
fuente
El hecho de que la tubería sea objetos significa que puede hacer una evaluación diferida, etc. Entonces, si está pasando un conjunto de objetos de archivo por una tubería ... tal vez le interese el nombre o la fecha de modificación, pero tal vez el contenido. ¿Qué datos pasas en JSON? Respuesta: depende. Si el consumidor de la tubería extrae datos, puede solicitar los datos correctos. Problema resuelto.
Nigel Thorne
1

Otro pensamiento tres años después: es posible representar un objeto con una secuencia de texto utilizando XML o JSON. Prefiero JSON (más simple) y, de hecho, hay proyectos por ahí para dar soporte a las utilidades clásicas * NIX JSON. Por ejemplo: https://github.com/step-/JSON.awk

Un problema con el uso de un modelo de tipo de objeto para programas clásicos * NIX como AWK es que realmente no tienen soporte OO. Por ejemplo, aunque AWK tiene matrices asociativas, las matrices no son multidimensionales (cada elemento en una matriz de AWK debe ser un número o una cadena; una matriz no puede ser un objeto de matriz en AWK).

samiam
fuente
Clojure ofrece edn que permite serializar / deserializar todo tipo de datos escritos mientras JSON es limitado.
Mario