Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

¿Linux dice “Argument list too long”? Mide argv y el entorno antes de dividir

E2BIG puede ser la suma de argv y entorno, una sola cadena demasiado larga o un envoltorio que creó un argumento gigante. Clasifica el límite y usa un transporte acotado que preserve nombres.

Ramas E2BIG de argv, entorno y cadena individual.
Ilustración original de Watch at Ease: captura, clasifica y elige transporte acotado. Watch at Ease

E2BIG puede ser la suma de argv y entorno, una sola cadena demasiado larga o un envoltorio que creó un argumento gigante. Clasifica el límite y usa un transporte acotado que preserve nombres.

E2BIG cubre el total de argv y entorno, una cadena excesiva y otros límites de exec.

1. Congela el exec intentado

Antes de sustituir el glob, guarda comando exacto, shell, directorio y error. Captura una expansión pequeña y representativa y el script o regla make que la genera; no vuelvas a meter millones de nombres en otro diagnóstico.

Confirma si el shell informó el error antes de iniciar el programa. Si no hay proceso ni registro de la aplicación, el fallo está en el límite exec, no dentro de rm, cp, grep o el binario.

2. Mide todo el presupuesto

Registra getconf ARG_MAX, límite de pila, bytes del entorno, número de argumentos, bytes argv estimados y la cadena más larga. Mide en el mismo servicio, contenedor, CI o planificador que falla.

Trátalo como presupuesto, no promesa. Linux cuenta terminadores y punteros, el entorno viaja al nuevo proceso y un solo argumento puede fallar aunque el total parezca menor que ARG_MAX.

3. Clasifica la forma del fallo

Usa tres ramas: muchos elementos normales agotan el total; una ruta o comando generado supera el techo por cadena; o un envoltorio pone toda la receta en un argumento sh -c. Un entorno heredado enorme es la cuarta rama.

No supongas que la causa es el número de archivos. Reduce una variable de prueba, inspecciona el elemento más largo y reproduce con una orden inocua antes de cambiar producción.

4. Elige transporte seguro

Para nombres, prefiere find -exec utility … {} + cuando encaje, o find -print0 con xargs -0. Con GNU xargs consulta --show-limits y fija un -s conservador.

No envíes nombres separados por salto de línea a xargs ni reconstruyas la lista gigante con sustitución de comandos. Entrada estándar, manifiestos o response files pueden conservar mejor una operación lógica.

5. Demuestra el resultado

Prueba una muestra no destructiva con espacios, saltos de línea, guiones iniciales y el nombre más largo. Registra cada invocación, estado y conteo sin revelar rutas sensibles.

Acepta solo si entrada y procesados cuadran, todos los errores son visibles, ningún lote excede el presupuesto y una interrupción puede reanudarse desde un resto duradero. Las acciones destructivas requieren copia o fuente reproducible.

Puertas de aceptación para lotes acotados y seguros.
Ilustración original de Watch at Ease: nombres, presupuesto y resultado deben pasar. Watch at Ease