Escribí un enumerador en bash porque estaba harto de xargs
Una pequeña utilidad de Bash que unifica la iteración sobre archivos y listas con un marcador `{}` recibe escepticismo por parte de usuarios de la línea de comandos que argumentan que `find -print0`, `xargs -0`, GNU Parallel y simples bucles `while read` ya resuelven এসব tareas cuando se usan correctamente. Los comentaristas contrastan el deseo de una sintaxis uniforme y más fácil con el valor de aprender las herramientas POSIX existentes, las preocupaciones de portabilidad y el riesgo de añadir otro envoltorio con sus propias peculiaridades. El intercambio se amplía a una crítica de los shells tradicionales —destacando los numerosos peligros de Bash, herramientas alternativas como zsh, nushell y PowerShell, y la tensión entre seguir con utilidades ubicuas pero arcaicas y adoptar enfoques más modernos y estructurados.
Necesidad percibida de bashumerate
- Objetivo del OP: una forma única y coherente basada en
{}para iterar sobre archivos, líneas, rangos y listas, evitandofor,find -execy los flags dexargs. - A algunos esto les parece atractivo en principio (un solo modelo mental, comandos cortos sencillos).
- Otros sostienen que no es “más simple”, sino solo “más fácil”: añade otra herramienta y otra sintaxis en lugar de aprender las existentes.
La corriente de “simplemente usa las herramientas del shell”
- Muchos dicen que
xargs+find(con-print0/-0) ya resuelven casi todos los problemas, incluidos los espacios en nombres de archivo y los límites de la lista de argumentos. find -exec ... +yfind -deletese destacaron como patrones mejores y más simples para muchos ejemplos.- Varios recomiendan bucles
while read(a menudo usando$REPLY) para iteración basada en líneas, con advertencias sobre subshells cuando se usan pipes. - Algunos muestran pequeñas funciones envoltorio personalizadas (mini-enumeradores) que han construido en lugar de añadir una nueva dependencia.
Corrección, casos límite y preocupaciones de sintaxis
- Se hace mucho hincapié en que el problema de los “nombres de archivo con espacios” se resuelve con terminación NUL (
-print0,xargs -0), ahora incluso estandarizada en POSIX 2024. - Advertencias sobre nuevas líneas en nombres de archivo y límites de expansión de glob; algunos señalan que la implementación basada en glob de
bashumeratepuede topar con problemas de argumentos/memoria. - Críticas a la sintaxis de
enumerate: uso poco convencional de--, requisitos de comillas y reemplazo estilo plantilla con{}que reintroduce trampas de comillas/escape. - Algunos argumentan que la herramienta cubre solo un subconjunto de lo que hacen
find/bucles, así que termina siendo sintaxis extra encima, no un reemplazo.
Rendimiento y paralelismo
- Se elogia a
xargspor agrupar argumentos y, opcionalmente, paralelizar (-P), frente al comportamiento de un proceso a la vez defind -exec. - Algunos prefieren la claridad y simplicidad por encima de la velocidad en paralelo para la mayoría de las tareas diarias.
Alternativas y debates más amplios sobre el shell
- Otras herramientas mencionadas: GNU Parallel (elogiado por su potencia y criticado por la UX, la insistencia en citar y el comportamiento en la primera ejecución),
lr/xe,rush,fd, envoltorios personales en Python/Go, canalizaciones basadas en CSV. - El hilo deriva hacia un debate más amplio: shell POSIX tradicional frente a shells más modernos (zsh, nushell, PowerShell, rc, xonsh).
- Un tema recurrente: se valora usar herramientas ubicuas y estándar (POSIX
sh/bash+ coreutils) por su portabilidad en sistemas aleatorios, a pesar de sus rarezas.