Ok, Bürger. Daher habe ich die Grenzwerte für die Befehlszeilenlänge seit einiger Zeit als Evangelium akzeptiert. Was tun mit den eigenen Annahmen? Überprüfen Sie sie natürlich.
Ich habe eine Fedora 22-Maschine zur Verfügung (dh: Linux mit bash4). Ich habe ein Verzeichnis mit 500.000 Inodes (Dateien) mit jeweils 18 Zeichen erstellt. Die Befehlszeilenlänge beträgt 9.500.000 Zeichen. So erstellt:
seq 1 500000 | while read digit; do
touch $(printf "abigfilename%06d\n" $digit);
done
Und wir stellen fest:
$ getconf ARG_MAX
2097152
Beachten Sie jedoch, dass ich dies tun kann:
$ echo * > /dev/null
Dies schlägt jedoch fehl:
$ /bin/echo * > /dev/null
bash: /bin/echo: Argument list too long
Ich kann eine for-Schleife ausführen:
$ for f in *; do :; done
Das ist eine andere Shell gebaut.
Sorgfältiges Lesen der Dokumentation fürARG_MAX Zustände, Maximale Argumentationsdauer für die exec-Funktionen . Das heißt: Ohne Anruf execgibt es keine ARG_MAXEinschränkung. Es würde also erklären, warum Shell-Buildins nicht durch eingeschränkt werden ARG_MAX.
Und tatsächlich kann ich lsmein Verzeichnis, wenn meine Argumentliste 109948 Dateien lang ist oder ungefähr 2.089.000 Zeichen (Geben oder Nehmen). Sobald ich jedoch eine weitere 18-stellige Dateinamensdatei hinzufüge, wird eine zu lange Fehlerliste angezeigt. So ARG_MAXfunktioniert wie in der Werbung: die exec mit mehr versagt als ARG_MAXZeichen auf dem Argumente Listen- einschließlich, sollte darauf hingewiesen werden, die Umgebungsdaten.