Escrevi um enumerador em bash porque estava cansado do xargs
Uma pequena utilidade em Bash que unifica a iteração sobre arquivos e listas com um placeholder `{}` é recebida com ceticismo por usuários de linha de comando que argumentam que `find -print0`, `xargs -0`, GNU Parallel e simples loops `while read` já dão conta dessas tarefas quando usados corretamente. Os comentários contrapõem o desejo por uma sintaxe fácil e uniforme ao valor de aprender ferramentas POSIX já existentes, às preocupações de portabilidade e ao risco de adicionar apenas mais um wrapper com suas próprias peculiaridades. A discussão se amplia para uma crítica aos shells tradicionais — destacando as muitas armadilhas do Bash, ferramentas alternativas como zsh, nushell e PowerShell, e a tensão entre continuar com utilitários ubíquos porém arcaicos ou adotar abordagens mais modernas e estruturadas.
Necessidade Percebida de bashumerate
- Objetivo do OP: uma forma única e consistente, baseada em
{}, de iterar sobre arquivos, linhas, intervalos e listas, evitandofor,find -exece flags doxargs. - Alguns acham isso atraente em princípio (um único modelo mental, oneliners simples).
- Outros argumentam que não é “mais simples”, apenas “mais fácil”: adiciona outra ferramenta e sintaxe em vez de aprender as existentes.
Grupo do “Apenas Use as Ferramentas do Shell”
- Muitos dizem que
xargs+find(com-print0/-0) já resolvem quase todos os problemas, incluindo espaços em nomes de arquivos e limites de lista de argumentos. find -exec ... +efind -deleteforam destacados como padrões melhores e mais simples para muitos exemplos.- Vários recomendam loops
while read(frequentemente usando$REPLY) para iteração baseada em linhas, com ressalvas sobre subshells ao usar pipes. - Alguns mostram pequenas funções wrapper personalizadas (mini-enumeradores) que criaram em vez de adicionar uma nova dependência.
Correção, Casos de Borda e Preocupações de Sintaxe
- Forte ênfase de que o problema de “nomes de arquivos com espaços” é resolvido por terminação NUL (
-print0,xargs -0), agora até padronizada em POSIX 2024. - Alertas sobre quebras de linha em nomes de arquivos e limites de expansão de glob; alguns apontam que a implementação baseada em glob de
bashumeratepode sofrer com problemas de argumentos/memória. - Críticas à sintaxe de
enumerate: uso incomum de--, requisitos de aspas e substituição de{}no estilo template, reintroduzindo armadilhas de quoting/escaping. - Alguns argumentam que a ferramenta cobre apenas um subconjunto do que
find/loops fazem, então vira sintaxe extra em cima, não uma substituta.
Desempenho e Paralelismo
xargsé elogiado por agrupar argumentos e, opcionalmente, paralelizar (-P), em contraste com o comportamento de um processo por vez defind -exec.- Alguns preferem clareza e simplicidade a velocidade paralela para a maioria das tarefas do dia a dia.
Alternativas e Debates Mais Amplos sobre Shell
- Outras ferramentas mencionadas: GNU Parallel (tanto elogiado pelo poder quanto criticado pela UX, pela insistência em citações e pelo comportamento da primeira execução),
lr/xe,rush,fd, wrappers pessoais em Python/Go, pipelines baseados em CSV. - A discussão entra em um debate mais amplo: shell tradicional POSIX vs shells mais modernos (zsh, nushell, PowerShell, rc, xonsh).
- Um tema recorrente: usar ferramentas onipresentes e padrão (POSIX
sh/bash+ coreutils) é valorizado pela portabilidade entre sistemas aleatórios, apesar de suas esquisitices.