É o limite do tamanho dos argumentos e das variáveis de ambiente passadas para execve .
- POSIX especificá-lo através de
ARG_MAX
. - Linux anterior ao kernel 2.6.23, o limite para 32 páginas ( MAX_ARG_PAGES ). Com um tamanho de página de 4 kB, o limite é de 128 kB.
- Linux kernel 2.6.23 e posterior, o limite é 1/4 do tamanho de pilha permitido.
Observe que também há um limite para o comprimento máximo e o número de sequências transmitidas para execve . É hard-coded em fonte linux e é aplicado independentemente do tamanho de pilha permitido.
Você pode ver man 2 execve para mais detalhes.
Na segunda execução, o processo Perl não é iniciado, portanto, a substituição de comando 'perl …'
produz saída vazia e a
é definida como um valor vazio, reduzindo o ambiente a um tamanho pequeno. Em seguida, o terceiro comando é bem-sucedido e define o ambiente próximo ao limite de tamanho, e assim por diante.
Para mais clareza, você pode tentar export a; a=$(yes | head -c128k)
, então nenhum outro comando externo pode ser executado.