¿Hay alguna ventaja de usar Bash sobre Perl o Python?

Hola, he estado usando Linux por un tiempo y pensé que era hora de finalmente sumergirme en el shell scripting.

El problema es que no he encontrado ninguna ventaja significativa de usar Bash sobre algo como Perl o Python. ¿Hay alguna diferencia de rendimiento o potencia entre los dos? Me imagino que Python / Perl sería más adecuado en cuanto a potencia y eficiencia.

Dos ventajas vienen a la mente:

  • Sencillez: acceso directo a todas las maravillosas herramientas de Linux wc , ls , cat , grep , sed … etc. ¿Por qué utilizar constantemente el módulo de subprocess de python?
  • Cada vez me gusta más usar gnu parallel , con el que puedes ejecutar tus scripts de bash en paralelo. Por ejemplo, desde la página del manual, cree lotes de todos los archivos en el directorio en paralelo:

    ls *.jpg | parallel convert -geometry 120 {} thumb_{}

Por cierto, generalmente tengo algunas llamadas a python en mis scripts de bash (por ejemplo, para trazar). ¡Usa lo que sea mejor para la tarea!

Los scripts de Perl son generalmente (si no el 100% del tiempo) más rápidos que bash.

Una discusión sobre eso: Perl vs Bash

bash no es un lenguaje tanto como un intérprete de comandos que ha sido hackeado hasta la muerte para permitir que las cosas se vean como un lenguaje de scripting. Es genial para las tareas únicas más simples de 1 a 5 líneas, pero las cosas que son muy simples en Perl o Python, como la manipulación de matrices, son horriblemente feas en bash. También encuentro que bash tiende a no pasar dos reglas básicas:

  1. La regla de los 6 meses, que dice que debería ser capaz de discernir fácilmente el propósito y la mecánica básica de un guión que usted escribió pero que no ha visto en 6 meses.

  2. La regla ‘WTF por minuto’. Todos tienen su límite, y el mío es bastante pequeño. Una vez que llegue a 3 WTFs / min, estoy buscando en otro lado.

En cuanto a la “extinción” en lenguajes de script como Perl y Python, encuentro que casi nunca necesito hacer esto, fwiw (descargo de responsabilidad: codifico casi el 100% en Python). Los módulos de Python os y shutil tienen la mayoría de lo que necesito la mayor parte del tiempo, y hay módulos incorporados para manejar archivos tar, archivos gzip, archivos zip, etc. Hay un módulo global, un módulo fnmatch … hay mucho de cosas allí. Si encuentras algo que necesitas para paralelizar, luego sangra tu código por un nivel, ponlo en un método ‘run ()’, ponlo en una clase que extienda ya sea threading.Thread o multiprocessing.Process, crea una instancia de tantos de ellos como lo que quieras, llamando a ‘start ()’ en cada uno. Menos de 5 minutos para obtener ejecución paralela en general.

La mejor de las suertes. Espero que esto ayude.

Para grandes proyectos usa un lenguaje como Perl.

Hay algunas cosas que solo puede hacer en bash (por ejemplo, alterar el entorno de llamada (cuando el script se adquiere en lugar de ejecutarse). Además, el shell scripting es un lugar común. Vale la pena aprender lo básico y aprender a recorrer el docs disponibles

Además, hay ocasiones en que conocer un pozo de shell puede guardar su tocino (en un sistema bombardeado por bifurcaciones donde no puede iniciar ningún proceso nuevo, o si /usr/bin y /usr/local/bin no se montan).

La ventaja es que está ahí. A menos que uses Python (o Perl) como tu shell, escribir un script para hacer un simple bucle es un montón de trabajo extra.

Para scripts cortos y simples que llaman a otros progtwigs, usaré Bash. Si quiero mantener la salida, es muy probable que cambie a Python.

Por ejemplo:

 for file in *; do process $file ; done 

donde process es un progtwig que quiero ejecutar en cada archivo, o …

 while true; do program_with_a_tendency_to_fail ; done 

Hacer cualquiera de los de Python o Perl es una exageración.

Para escribir realmente un progtwig que espero mantener y usar con el tiempo, Bash rara vez es la herramienta adecuada para el trabajo. Particularmente ya que la mayoría de los Unices modernos vienen con Perl y Python.

La ventaja más importante de los scripts de shell POSIX sobre los scripts de Python o Perl es que un shell POSIX está disponible en prácticamente todas las máquinas Unix. (También hay algunas tareas para las que los scripts de shell son un poco más convenientes, pero ese no es un problema importante). Si la portabilidad no es un problema para usted, no veo mucha necesidad de aprender el script de shell.

Si desea ejecutar progtwigs instalados en la máquina, nada mejor que bash. Siempre puedes hacer una llamada al sistema desde Perl o Python, pero me parece una molestia leer valores de retorno, etc.

Y como sabe, funcionará prácticamente en cualquier lugar a lo largo de todo el tiempo …

La ventaja de los scripts de shell es que está presente globalmente en los cuadros * ix, y tiene un conjunto central relativamente estable de características en las que puede confiar para ejecutar en todas partes. Con Perl y Python, tiene que preocuparse de si están disponibles y, de ser así, qué versión, ya que ha habido importantes incompatibilidades sintácticas a lo largo de sus vidas. (Especialmente si incluyes Python 3 y Perl 6.)

La desventaja de shell scripting es todo lo demás. Los lenguajes de script de shell suelen carecer de expresividad, funcionalidad y rendimiento. Y el hackeo de líneas de comando a partir de cadenas en un lenguaje sin funciones de procesamiento de cadenas y bibliotecas sólidas, para garantizar que el escape sea correcto, provoca problemas de seguridad. A menos que haya una razón de compatibilidad convincente por la que necesite ir con el shell, personalmente me gustaría rellenar un lenguaje de scripting cada vez.