Was ist die maximale Länge von Kommandozeilenargumenten in gnome-terminal?

Antworten:

32

xargsweiß. Auf meinem System

$ xargs --show-limits
Your environment variables take up 2572 bytes
POSIX upper limit on argument length (this system): 2092532
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2089960
Size of command buffer we are actually using: 131072
Chipaca
quelle
5
Um dies zu erweitern, ist das Limit nicht im Terminal, sondern im Kernel (und auch in der Shell), aber ich denke, das Standardlimit der Shell (bash) ist so hoch wie das Kernellimit. Dies xargsdient nicht nur zum Melden des Grenzwerts, sondern auch (in erster Linie) zum Umgehen des Grenzwerts. Weitere Informationen finden Sie auf der Manpage oder in einer anderen Dokumentation.
Gilles 'SO- hör auf böse zu sein'
1
Diese Antwort gefällt mir besonders wegen der Ausgabe "könnte tatsächlich verwendet werden". Ich habe ein wenig daran herumgespielt und mir diese Befehlsvariante ausgedacht, um den Wert "tatsächlich" zu isolieren. (Vielleicht gibt es einen einfacheren Weg, aber hey, es funktioniert und ist für ein Drehbuch geeignet:xargs --show-limits --no-run-if-empty < /dev/null 2>&1 |sed -n "/could actually use/s/.*: \\([0-9]\+\\)/\1/p"
Peter.O
Seltsamerweise scheint xargs das Umgebungslimit im POSIX-Limit zu verdoppeln (POSIX-Limit = ARG_MAX - 2048 (Headroom) - envvars).
Tobu
18

Die Antwort kommt vom sysconf- Wert ARG_MAX. So überprüfen Sie es auf Ihrem System:

getconf ARG_MAX

Für mich berichtet dies 2097152. Weitere Details finden Sie in der Manpage:

man sysconf

Um dies in ein Programm zu bekommen, zum Beispiel:

#include <unistd.h>
...
printf("%ld\n", sysconf(_SC_ARG_MAX));
Kees Cook
quelle
1
Danke KC .. +1; Ein guter Weg, um den absoluten MAX-Wert zu erhalten, aber ich habe die xargs-Methode wegen ihres Faktors "tatsächlich verfügbar" bevorzugt ... da ich tatsächlich nach einem Laufzeitwert gesucht habe (aber das habe ich nicht erwähnt :(
Peter .O
0

Ich weiß nicht wirklich, was Gnome-Terminal ist, aber die Shell hat kein 'festes' Limit, sondern das Limit des Stacks.

Es gibt jedoch ein Hardcode-Limit von 128 KB pro Argument, das kein Problem darstellen sollte, wenn Sie keine "sehr sehr sehr langen Argumente ..." verwenden.

Hier können Sie mehr darüber lesen:

http://www.mail-archive.com/[email protected]/msg05522.html

OpenNingia
quelle