Por quanto tempo é sua linha de comando?
Se estiver no intervalo de megabytes, talvez você possa recompilar seu kernel com um ARG_MAX
maior no arquivo linux-3.*/include/linux/limits.h
. Eu coloquei lá
#define ARG_MAX 2097152 /* # bytes of args + environ for exec() */
(também pode haver uma maneira de definir esse limite dinamicamente, mas esqueci como e posso estar errado)
Eu gosto muito do ARG_MAX
limit porque ocasionalmente uso o recurso de expansão global **/*.c
de zsh
, que é meu shell interativo.
Não coloque um valor enorme em ARG_MAX
; Eu acho que você quer ter menos de 2% da sua memória RAM disponível.
Observe que /proc/*/cmdline
contém bytes nulos. Você pode traduzi-los, veja this .
adendos
se, por alguma razão, você não puder pagar por uma linha de comando grande, encontre alguma forma e convenção para evitar ter uma quantidade tão grande de argumentos de programa. Por exemplo, você poderia modificar o programa chamado para ler algumas coisas de um arquivo ou alguma outra fonte (banco de dados?). Por exemplo, alguns programas Unix (por exemplo, GCC) aceitam @
filename para ler opções de algum arquivo chamado nome do arquivo .