
Estoy intentando ingresar un comando con un argumento MUY grande (1 MB de tamaño), pero dice "Lista de argumentos demasiado larga". ¿Cómo puedo ingresar ese argumento?
Sistema operativo: Linux Ubuntu
Respuesta1
No hay forma de pasar un argumento entre ejecutables si es mayor que el ARG_MAX
límite del kernel.
Si tienes unlista deargumentos que son demasiado largos, se pueden dividir en partes más pequeñas, por ejemplo, con xargs
. Esto ejecuta el comando tantas veces como sea necesario, proporcionando tantos argumentos como quepan.
La sintaxis es xargs command <file
. Si omite command
, muestra sus argumentos, como echo
.
Como demostración,
xargs -n 4 </etc/motd
imprimirá los primeros cuatro tokens en una línea (primera invocación), los cuatro siguientes a través de otra, etc. (El -n
argumento establece un número máximo de argumentos, por lo que no utiliza el ARG_MAX
límite en absoluto).
Si el comando que desea ejecutar tiene efectos secundarios no deseados, es posible que esto no funcione. Por ejemplo, si command
sobrescribe cualquier archivo previamente existente ./a.out
, obviamente se quedará con los resultados de la última ejecución una vez finalizada.
Si puede configurarlo o modificarlo command
para que lea un archivo, o una entrada estándar, en lugar de un argumento de línea de comandos, eso solucionará la restricción. Un archivo o secuencia puede ser mucho más grande que ARG_MAX
, y a menudo lo es.