Estamos haciendo todos nuestros scripts con Bash hasta ahora, pero estoy empezando a sentirme un poco tonto al respecto. Si bien, por supuesto, podemos hacer todo lo que queramos con Bash (es bastante poderoso), estoy empezando a preguntarme si no deberíamos usar un lenguaje de secuencias de comandos adecuado (en nuestro caso, probablemente Ruby).
¿Cómo decides cuándo usar Perl / Python / Ruby sobre Bash para un script? No creo que un script de inicio con Ruby tenga sentido, pero ¿qué tal un script un poco más largo que agrega cuentas de correo electrónico?
Respuestas:
Dado un problema que ambos pueden resolver, querrá usar el que le resulte más cómodo. En última instancia, hay muchos pequeños detalles, y solo la experiencia puede enseñarle a verlos.
Bash es un lenguaje de script de propósito general como Python, Ruby, Perl, pero cada uno tiene diferentes puntos fuertes sobre el resto. Perl sobresale en el análisis de texto, Python dice ser el más elegante del grupo, los scripts de Bash son excelentes para "entender todo", si sabes a lo que me refiero, y Ruby ... bueno, Ruby es un poco especial en muchos de maneras.
Sin embargo, las diferencias entre ellos solo importan una vez que tenga una buena cantidad de experiencia en secuencias de comandos. Le sugiero que elija un idioma y lo lleve a sus límites antes de pasar al siguiente. Puedes hacer mucho en un script de shell, más de lo que la mayoría de la gente admitiría. Cualquier idioma es tan difícil como quieras. Después de haber escrito un par de cosas en él, cada idioma es "fácil" para usted.
Estar familiarizado con el shell vale la pena rápidamente si vives en Linux, así que tal vez quieras comenzar con eso. Si encuentra una tarea que es imposible o poco práctica de resolver en un script de shell, use otra cosa.
Además, tenga en cuenta que aprender scripting de shell es muy simple. El verdadero poder de esto radica en otros programas, como awk, sed, tr, et al.
fuente
TL; DR: use bash solo para instalar un mejor idioma (si aún no está disponible), de lo contrario está desperdiciando un tiempo humano irrecuperable y precioso. Si no puede hacerlo a mano en la línea de comandos sin errores, no escriba con bash / shell.
Es 2015, por lo que consideraría lo siguiente:
sobrecarga de memoria
tiempo de inicio
actuación
productividad
Creo que no hay razón para usar Bash / Shell si tienes instalado Ruby / Python.
Y probablemente para instalar Ruby / Python ni siquiera necesita un script bash en primer lugar (con la excepción de busybox, algunas herramientas del sistema dependen de que Python / Perl esté presente de todos modos).
Y cada vez que escribe un script de shell, está "practicando" haciendo exactamente eso, en lugar de aprender algo más poderoso / productivo.
¿Por qué la gente usa Bash hoy en día? Porque es un hábito terrible y difícil de romper. Un guión rara vez se "termina para siempre" después de los primeros minutos, sin importar cuán fuertemente las personas tiendan a pensar de esa manera. Junto con la falacia de "es el último error en este script".
Conclusión: use bash / shell solo cuando esté absolutamente obligado a hacerlo (como
~/.bashrc
busybox), porque hoy en día casi nunca es "la herramienta adecuada para el trabajo".fuente
Uso bash cuando mi enfoque principal es el manejo de archivos. Esto podría incluir mover, copiar y renombrar archivos, así como usar archivos como entrada para otros programas o almacenar la salida de otro programa en archivos. Raramente escribo código bash que realmente examine el contenido de un archivo o genere la salida para escribir en un archivo; Lo dejo a los otros programas (que puedo escribir en Perl o Python) que ejecuto a través de bash.
Uso Perl y Python cuando mi enfoque principal es leer datos de archivos, procesar esos datos de alguna manera y escribir resultados en archivos. Si me encuentro usando (en Perl) el
system
comando, los ticks de retroceso o (en python) elsubprocess
módulo demasiado, considero escribir el script en bash. Por otro lado, a veces empiezo a agregar tanta funcionalidad a un script bash que eventualmente tiene más sentido reescribirlo en Perl / python en lugar de tratar con el soporte limitado (en comparación) de bash para el alcance variable, funciones, estructuras de datos, etc. .fuente
=~
operador que me apoyaba,[[ ]]
me encantaba algo de Bash para la lectura simple de archivosMe gustan los criterios establecidos en esta publicación de blog .
fuente
Este análisis de Perl versus Bash me pareció útil ...
http://blogs.perl.org/users/buddy_burden/2012/04/perl-vs-shell-scripts.html
Por conveniencia, estoy copiando un resumen de ese autor 1) cuando bash es mejores hallazgos y 2) cuando perl es mejor conclusión ...
Cuando Bash es mejor ...
Cuando Perl es mejor ...
fuente
fail "error" unless system("foobar")
).En mi experiencia, bash versus python es una compensación entre el tiempo de desarrollo y la flexibilidad. Una solución rudimentaria a un problema generalmente se puede establecer en un script bash más rápido de lo que se puede hacer en un script python.
Python tenderá a hacerte pensar más en la estructura de tu solución que el script bash equivalente. Python tiene más poder expresivo que un script bash, por lo que tiende a escalar y modificarse mejor con el tiempo. También sigue siendo más legible en general.
Bash está más cerca del sistema de archivos y puede ser excelente para el primer borrador de soluciones a problemas que NO están bien definidos. Por esta razón, un script bash podría ser una buena primera opción para crear un prototipo con la intención de portarlo a Python una vez que se comprenda mejor el problema.
fuente
Bash es un shell de Unix e incluye un lenguaje de script. Es más bien el procesador de comandos. usted controla la forma en que ejecuta los comandos, en realidad los ejecuta.
Perl / Ruby / Python son lenguajes de uso general.
Cuando quieres un script de shell, usas Bash
Si desea una tarea más compleja o no relacionada con el shell. Utiliza Python, etc.
Nunca compararía estos idiomas en realidad. Python, etc.son portátiles. Puedes ejecutarlos en cualquier lugar. Bash es solo para Unix.
Python, etc. tiene toneladas de bibliotecas reutilizables que resuelven millones de tareas.
Es casi lo mismo si preguntas. "Cuándo usar Paint y cuándo usar Photoshop"
Para procesar correos electrónicos, usaría Ruby, una vez más, porque tiene muchas bibliotecas reutilizables.
Pero la mejor manera sería combinar bash y ruby. Eso estaría bien. Al igual que crea una secuencia de comandos de procesamiento de correo electrónico en ruby y bash, invocaría esa secuencia de comandos ruby y ejecutaría otros comandos.
Entonces, cada vez que necesite un procesador de comandos, use bash. Ejecutas comandos unix y los controlas.
ACTUALIZACIÓN después de 7 años (marzo de 2019)
Si bien la parte principal de mi respuesta no cambió, me gustaría señalar eso.
Bash también es un poderoso lenguaje de scripting. Para el procesamiento de texto podría ser una elección legítima absoluta.
Por favor, lea los comentarios de mkaito a continuación. Todos son completamente ciertos.
fuente
Los scripts de shell como bash, ksh, zsh, sh y fish son notoriamente sorprendentes, en comparación con los lenguajes de propósito general de alto nivel como Ruby, Python o Perl. Si bien un script de shell puede comenzar su vida como un archivo más corto que el script de propósito general equivalente, las sorpresas conducen a un montón de código de ajuste defensivo, como
set -euo pipefail
habilitar modos estrictos.Por ejemplo, la mayoría de los lenguajes de shell continúan ejecutando líneas en un script de shell, incluso cuando falla uno de los comandos. Por el contrario, un lenguaje de propósito general falla inmediatamente en el primer error y, a menudo, con carga, lo que resulta en un comportamiento más seguro y predecible en secuencias de comandos de complejidad incluso ligera.
fuente
Artículo muy sesgado.
No creo que bash sea tan difícil de depurar. Python es a menudo demasiado rígido, mientras que bash te permite ser muy creativo. Si eres un buen pensador listo para usar, te gustará la fiesta.
Ejecuto scripts de bash en millones de lecturas de secuenciación de ADN en miles de archivos, y me sirve muy bien. Y al contrario de lo que todos dicen, las mismas versiones de los scripts en C ++ en realidad no se ejecutan mucho más rápido (en unos minutos los separan).
Creo que bash, como perl, no es el más fácil de usar / fácil de leer. Eso asusta a la gente porque la mayoría de las personas no son grandes pensadores abstractos. Pero los programadores más creativos y brillantes tienden a amarlo y a usarlo con frecuencia. Si te conoces a ti mismo y sabes que tienes cerebro, no te asustes con bash. Si eres un pensador básico, quizás te quedes con algo como Python. A cada cual lo suyo.
fuente
Del "Libro de la Llama"
fuente
Como regla general, use el lenguaje más simple que tenga un rendimiento suficientemente bueno para su tarea en cuestión. Y sus particularidades solo en la medida en que son realmente útiles.
Y sobre la legibilidad, Bash es horrible si tu estilo de programación es horrible. Si solo arrojas código allí, se vuelve oscuro.
Pero si divide el código en las funciones más cortas y nombra las cosas de una manera simple y comprensible, es el lenguaje más claro que puede encontrar. Porque es muy conciso.
Como muestra, este es mi último código en Bash. Observe lo fácil de entender y escribir es:
fuente