Scripts de shell funcionales

Scripts de shell funcionales

Descubrí que cuando quiero crear algún script de shell o comando avanzado, siempre me resulta difícil recordar los nombres de los comandos y sus modificadores.

p.ej

tr -d '\n' < file | wc -c

Aunque en lenguajes de programación podría escribir algo como

len(reemplazar(cadena(archivo), "\n", ""))

Lo cual es más memorable y hay menos probabilidad de buscar en páginas man y es más comprensible para los demás.

Entonces, ¿por qué los scripts de shell se mantienen durante tantos años en esta forma críptica? ¿Es un esfuerzo por cambiar la sintaxis para dejar claro qué hace el código sin estudiar muchas páginas de manual? ¿Hay algunas ventajas de esta forma? ¿Cómo podemos hacer frente a las desventajas para aprovechar al máximo las secuencias de comandos de Shell?

Respuesta1

¿Cuántos lenguajes de programación conoces que te permitan abrir un archivo para leerlo, llamar a una función de biblioteca que consume el contenido de ese archivo, transmitir la salida de esa función a otra, devolver la salida de la segunda función al usuario, devolver un estado de salida y luego limpiar todo después, todo en una línea muy corta?

El ejemplo que usted da omite muchos de los gubbins de soporte que necesitan la mayoría de los idiomas.

¿Cuántos lenguajes de programación tienen funciones de biblioteca que aceptan números arbitrarios de entradas, funcionan en una variedad de modos y tienen una interfaz simple?

printf, tal vez, pero la mayoría de las bibliotecas terminan teniendo una amplia gama de funciones con diferentes nombres y diferentes parámetros que debes aprender. No veo la diferencia.

Además, la mayoría de los idiomas llamarían a las funciones en serie. Los scripts de Shell los ejecutan en paralelo y pueden transmitir cantidades arbitrarias de datos a través de la canalización sin consumir mucha memoria y (si la fuente de datos es el teclado, un socket de red o algo así) todo se hace con una evaluación diferida, a medida que avanza. llegan los datos. ¿Tu idioma favorito hace eso?

Hay muchos lenguajes que pueden hacer el trabajo más rápido o más eficientemente, o pueden procesar números con mayor precisión, ¡pero no subestimes el poder del script de shell!

¿En cuanto a la sintaxis? Bueno, funciona. Tendrías que aprenderlo sin importar lo que pareciera. ¿Qué más quieres?

Respuesta2

Intentarpbs-- combinando herramientas de línea de comando con Python -- por ejemplo así:

# sort this directory by biggest file
print sort(du(glob("*"), "-sb"), "-rn")

# print the number of folders and files in /etc
print wc(ls("/etc", "-1"), "-l")

información relacionada