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 exec
gibt es keine ARG_MAX
Einschränkung. Es würde also erklären, warum Shell-Buildins nicht durch eingeschränkt werden ARG_MAX
.
Und tatsächlich kann ich ls
mein 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_MAX
funktioniert wie in der Werbung: die exec mit mehr versagt als ARG_MAX
Zeichen auf dem Argumente Listen- einschließlich, sollte darauf hingewiesen werden, die Umgebungsdaten.