Flujo típico de mainframe ...
Input Disk/Tape/User (runtime) --> Job Control Language (JCL) --> Output Disk/Tape/Screen/Printer
| ^
v |
`--> COBOL Program --------'
Flujo típico de Linux ...
Input Disk/SSD/User (runtime) --> sh/bash/ksh/zsh/... ----------> Output Disk/SSD/Screen/Printer
| ^
v |
`--> Python script --------'
| ^
v |
`--> awk script -----------'
| ^
v |
`--> sed script -----------'
| ^
v |
`--> C/C++ program --------'
| ^
v |
`--- Java program ---------'
| ^
v |
: :
Las cáscaras son el pegamento de Linux
Los shells de Linux como sh / ksh / bash / ... proporcionan facilidades de designación de entrada / salida / control de flujo muy parecidas al antiguo lenguaje de control de trabajos de mainframe ... ¡pero con esteroides! Son lenguajes completos de Turing por derecho propio mientras se optimizan para pasar datos y control de manera eficiente hacia y desde otros procesos de ejecución escritos en cualquier idioma que admita el sistema operativo.
La mayoría de las aplicaciones de Linux, independientemente del idioma en el que esté escrito la mayor parte del programa, dependen de scripts de shell y Bash se ha convertido en el más común. Al hacer clic en un icono en el escritorio, normalmente se ejecuta un breve script Bash . Ese script, ya sea directa o indirectamente, sabe dónde están todos los archivos necesarios y establece variables y parámetros de línea de comando, finalmente llamando al programa. Ese es el uso más simple de un caparazón.
Sin embargo, Linux tal como lo conocemos difícilmente sería Linux sin los miles de scripts de shell que inician el sistema, responden a eventos, controlan las prioridades de ejecución y compilan, configuran y ejecutan programas. Muchos de ellos son bastante grandes y complejos.
Los shells proporcionan una infraestructura que nos permite usar componentes prediseñados que están vinculados entre sí en tiempo de ejecución en lugar de compilar. Esos componentes son programas independientes por derecho propio que se pueden usar solos o en otras combinaciones sin volver a compilar. La sintaxis para llamarlos es indistinguible de la de un comando incorporado de Bash y, de hecho, existen numerosos comandos incorporados para los que también hay un ejecutable independiente en el sistema, que a menudo tiene opciones adicionales.
No existe una diferencia de rendimiento en todo el lenguaje entre Python y Bash . Depende completamente de cómo esté codificado cada uno y de qué herramientas externas se llamen.
Cualquiera de las herramientas conocidas como awk, sed, grep, bc, dc, tr, etc. dejará de hacer esas operaciones en cualquier idioma en el polvo. Bash se prefiere para cualquier cosa sin una interfaz gráfica de usuario, ya que es más fácil y más eficiente llamar y devolver datos desde una herramienta como las que tienen Bash que Python .
Actuación
Depende de a qué programas llame el script de shell Bash y de su idoneidad para la subtarea que se les asigne, si el rendimiento general y / o la capacidad de respuesta será mejor o peor que el Python equivalente . Para complicar las cosas , Python , como la mayoría de los lenguajes, también puede llamar a otros ejecutables, aunque es más engorroso y, por lo tanto, no se usa con tanta frecuencia.
Interfaz de usuario
Un área donde Python es el claro ganador es la interfaz de usuario. Eso lo convierte en un lenguaje excelente para crear aplicaciones locales o cliente-servidor, ya que admite de forma nativa gráficos GTK y es mucho más intuitivo que Bash .
Bash solo entiende texto. Se deben llamar a otras herramientas para una GUI y los datos devueltos desde ellas. Una secuencia de comandos de Python es una opción. Las opciones más rápidas pero menos flexibles son los binarios como YAD, Zenity y GTKDialog .
Mientras que los shells como Bash funcionan bien con GUI como Yad , GtkDialog (interfaz tipo XML incrustado para funciones GTK +) , dialog y xmessage , Python es mucho más capaz y, por lo tanto, mejor para ventanas GUI complejas.
Resumen
Construir con scripts de shell es como armar una computadora con componentes listos para usar como lo son las PC de escritorio.
Construir con Python , C ++ o casi cualquier otro lenguaje es más como construir una computadora soldando los chips (bibliotecas) y otras partes electrónicas juntas como lo hacen los teléfonos inteligentes.
Los mejores resultados generalmente se obtienen al usar una combinación de idiomas donde cada uno puede hacer lo que mejor sabe hacer. Un desarrollador llama a esto " programación políglota ".