A lista de argumentos e o ambiente de um comando são copiados no mesmo espaço na memória quando um programa é iniciado. A mensagem de erro é "Lista de argumentos muito longa", mas, na verdade, o erro exato é que a lista de argumentos mais o ambiente é muito longa.
Isso acontece como parte da execve
chamada do sistema. A maioria, senão todas, as variantes unix têm um limite no tamanho deste espaço temporário. A razão para este limite é evitar que um programa malicioso ou com bugs faça com que o kernel use uma grande quantidade de memória fora do espaço de memória do programa.
O padrão POSIX especifica que o tamanho máximo deste espaço de memória deve ser pelo menos ARG_MAX
, e que o valor mínimo disso ( _POSIX_ARG_MAX
) é 4096. Na prática, a maioria das variantes do Unix permite mais que isso, mas não 10MB. Você pode verificar o valor em seu sistema com getconf ARG_MAX
. Nos sistemas Linux modernos, o máximo é de 2 MB (com configurações típicas). Tradicionalmente muitos sistemas tinham um limite de 128kB. O Linux também ainda tem um 128kB limite para o valor de um único argumento ou a definição de uma variável de ambiente .
Se você precisar passar mais do que algumas centenas de bytes de informação, passe-a em um arquivo.