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, evitando for, find -exec y los flags de xargs.
  • 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 ... + y find -delete se 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 bashumerate puede 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 xargs por agrupar argumentos y, opcionalmente, paralelizar (-P), frente al comportamiento de un proceso a la vez de find -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.