Estoy tratando de 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?
SO:Linux Ubuntu
Respuesta aceptada:
No hay forma de pasar un argumento entre ejecutables si es más grande que el ARG_MAX
del kernel límite.
Si tiene una lista de argumentos que son demasiado largos, se pueden dividir en partes más pequeñas, p. 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 siguientes cuatro a través de otra, etc. (El -n
argument establece un número máximo de argumentos, por lo que esto no usa el ARG_MAX
límite en absoluto.)
Si el comando que desea ejecutar tiene efectos secundarios que no son deseables, es posible que esto no funcione. Por ejemplo, si el command
sobrescribirá cualquier ./a.out
existente previamente archivo, obviamente se quedará con los resultados de la última ejecución después de que finalice.
Si puede configurar o modificar el comando command
por lo que lee un archivo, o una entrada estándar, en lugar de un argumento de la línea de comandos, que evitará la restricción. Un archivo o secuencia puede ser mucho más grande que ARG_MAX
, y a menudo lo es.