¿Qué ventajas tienen los shells basados ​​en texto como Bash sobre los shells basados ​​en objetos como PowerShell?

Realmente nada. No hay ventajas para los shells “basados ​​en texto”.

Esto se debe a la sencilla razón de que los objetos de PowerShell son muy superiores Y SIEMPRE se pueden convertir en texto siempre que lo desee; de ​​hecho, la mayoría de los comandos terminan con la salida convertida en texto para que el usuario la vea.

La gran desventaja de los shells basados ​​en texto es que no hay una forma trivial de convertir el texto de nuevo en objeto.

La conversión en esta dirección requiere un análisis específico del comando (para encontrar los elementos) y el filtrado (líneas irrelevantes), así como una comprobación de errores muy tediosa.

PowerShell ahora es de código abierto y sistema abierto (se ejecuta en Linux y OSX), por lo que incluso la supuesta ventaja de ejecutarse en sistemas que no sean Windows desaparecerá.

En cualquier caso, hay muchas más computadoras con Windows que Linux [e incluso como servidores ejecutamos de 2 a 1 o de 3 a 2 servidores de Windows a Linux].

PowerShell no solo está basado en objetos, sino que genera la salida del comando directamente a la entrada del siguiente comando sin conversión

PowerShell tiene acceso completo a las extensiones de lenguaje .NET y DOT-NET

PowerShell, por supuesto, tiene acceso, como los shells basados ​​en texto anteriores, a cualquier comando o idioma externo basado en texto, incluidos incluso los shells basados ​​en texto con los que cohabita el sistema operativo.

Incluso los comandos de PowerShell en sí mismos son objetos que el programador puede consultar y utilizar como cualquier otro objeto generado por esos comandos.

Si eso no fuera suficiente, tiene un sistema de ayuda fácilmente EXTENSIBLE que es superior a cualquier lenguaje de shell que lo precedió.

Por lo que puedo decir, PowerShell ES un shell basado en texto. Parece un shell que está más enfocado hacia la programación que el uso de la línea de comandos, mientras que bash / sh está más enfocado hacia el uso de la línea de comandos que la programación.

PowerShell se parece a Perl / Python / Ruby para mí. Se han escrito shells en Perl que exponen el entorno de programación perl en un entorno similar al shell.

  1. Bash es (algo) portátil en múltiples sistemas operativos frente a la dependencia de Windows / 7-SP1 + de PowerShell.
  2. Bash / sh es simple (¿primitivo?) Es adecuado para soluciones simples a problemas simples. No trata de resolver todos los problemas (y se llena de conceptos y características).
  3. Bash / sh es ESTABLE. Lo que escriba / diseñe ahora usando las funciones bash / sh funcionará tan bien como lo hace dentro de unos años. (Las “características” son una calificación sutil, significa solo los comandos incorporados, no los comandos externos.

Pero básicamente, “bash / sh” es el lenguaje de script para los sistemas * nix. Aborda la estructura conceptual simple de los sistemas * nix (que se presentó a principios de la década de 1970). Los lenguajes de comando para otros sistemas del período comprendido entre fines de la década de 1960 y mediados de la década de 1990 murieron con esos sistemas, desde DCL (lenguaje de comandos DEC) al procesador de comandos MTS / procesador de macro de línea de comandos MTS.

Bueno, una ventaja obvia es que podrían escribirse con las herramientas disponibles en la década de 1970, y fueron razonablemente rápidos en (por los estándares modernos) CPU totalmente anémicas de la época.

Pueden ser notablemente más rápidos, espero que usen menos batería para la mayoría de las cosas. Tal vez.

Además, los shells basados ​​en texto tienen sentido en los sistemas que no tienen un modelo de objeto uniforme, pero se podría argumentar que esos sistemas deberían obtener un modelo de objeto uniforme (y sí, en su mayoría uso sistemas con shells basados ​​en texto y sin modelos de objeto uniformes)

Aparte de eso, no puedo pensar mucho.

No hay ventajas, ya que el texto puede representarse como objetos: los shells basados ​​en objetos pueden hacer todo lo que los shells basados ​​en texto pueden hacer, solo difieren en que admiten tipos de datos adicionales (distintos del texto).

No hay nada que le impida escribir canalizaciones de PowerShell que pasen texto. Si tiene herramientas antiguas basadas en texto, funcionan. Es solo que si tiene herramientas que realmente usan objetos, puede omitir la serialización y deserialización constantes de datos en texto (lo que es más conveniente tanto para los autores de herramientas como para los usuarios de herramientas, y probablemente también mucho más rápido).

Siempre me pareció que la principal fortaleza de PowerShell es su capacidad para cargar estructuras de comandos desde otros sistemas operativos y componentes del servidor. Recuerdo administrador para SharePoint antes de PowerShell … enormes comandos largos porque la ventana de comandos era efectivamente sin estado.

Garry se ríe de mí porque escribo herramientas para hacer las cosas. Eso es lo que PowerShell es para mí. Sin estado, cosas como el andamiaje Entity Framework o la administración de almacenamiento es imposiblemente doloroso.

Windows tiene un shell basado en texto sin estado … el símbolo del sistema. También tiene PowerShell, que será más importante a medida que Microsoft impulse su agenda principal.

Ah … y PowerShell sobre SSH rocas!

Creo que PowerShell probablemente esté en casi cualquier nivel objetivo, un shell mejor diseñado que bash.

Sin embargo, a menudo el diseño no significa mucho en el terreno, y los shells como bash han tenido su usabilidad refinada durante décadas, mientras que Microsoft se quejó de hacer un shell “correcto”.

Creo que significa que si bien PowerShell puede hacerte decir “¡Guau!” Más que bash can, la realidad es que bash es mucho más útil en situaciones del mundo real.

PowerShell opera en objetos COM (Modelo de objetos componentes – Wikipedia) exclusivos de Windows. ¿Hay equivalente a COM en Linux? Aquí hay una respuesta: ¿Hay un equivalente a COM en los sistemas * nix? Si no, ¿cuál fue el enfoque * nix para la reutilización?

Bash, y sus derivados tienen la ventaja de ser maduros, NO vinculados a ninguna GUI o API, ubicuos, y casi todos los scripts de inicio del mundo están escritos en bash.

Ubicuidad e independencia de plataforma.