Ok, abitanti. Quindi ho accettato i limiti di lunghezza della riga di comando come gospel per un bel po 'di tempo. Allora, cosa fare con le proprie supposizioni? Naturalmente, controllali.
Ho una macchina Fedora 22 a mia disposizione (che significa: Linux con bash4). Ho creato una directory con 500.000 inode (file) ciascuno di 18 caratteri. La lunghezza della riga di comando è 9.500.000 caratteri. Creato così:
seq 1 500000 | while read digit; do
touch $(printf "abigfilename%06d\n" $digit);
done
E notiamo:
$ getconf ARG_MAX
2097152
Nota comunque che posso farlo:
$ echo * > /dev/null
Ma questo fallisce:
$ /bin/echo * > /dev/null
bash: /bin/echo: Argument list too long
Posso eseguire un ciclo for:
$ for f in *; do :; done
che è un altro builtin della shell.
Lettura attenta della documentazione per gliARG_MAX
stati, lunghezza massima degli argomenti per le funzioni exec . Ciò significa: senza chiamare exec
, non ci sono ARG_MAX
limitazioni. Quindi spiegherebbe perché i builtin della shell non sono limitati da ARG_MAX
.
E in effetti, posso la ls
mia directory se il mio elenco di argomenti è lungo 109948 file o circa 2.089.000 caratteri (dare o prendere). Una volta aggiunto un altro file di nome file di 18 caratteri, tuttavia, viene visualizzato un errore di elenco di argomenti troppo lungo . Quindi ARG_MAX
funziona come pubblicizzato: l'exec sta fallendo con più di ARG_MAX
caratteri nell'elenco degli argomenti, inclusi, va notato, i dati dell'ambiente.