O erro "argumento muito longo" é E2BIG
, gerado pelo execve
chamada de sistema se o tamanho total dos argumentos (mais o ambiente, em alguns sistemas) for muito grande. A chamada execve
é aquela que inicia processos externos, carregando especificamente um arquivo executável diferente (há uma chamada diferente, fork
, para executar um processo separado cujo código ainda é do mesmo arquivo executável). O for
loop é uma construção de shell interna, portanto, não envolve chamar execve
. O comando ls *.*
gera o erro não quando o glob é expandido, mas quando ls
é chamado.
execve
falha com o erro E2BIG
quando o tamanho total dos argumentos para o comando é maior que o ARG_MAX
limit . Você pode ver o valor desse limite em seu sistema com o comando getconf ARG_MAX
. (É possível que você ultrapasse esse limite se tiver memória suficiente; manter sob ARG_MAX
garante que execve
funcionará, desde que não ocorra nenhum erro não relacionado.)