it-swarm.com.de

Zeichenbeschränkung für Linux-Befehlszeilen

Ich übergebe eine Variable an ein Skript in der Befehlszeile. Was ist die Zeichenbeschränkung eines Befehls? z.B:

$ MyScript reallyreallyreally...reallyreallyreallylongoption

Vielen Dank.

33
robdog

Das von Shell/OS auferlegte Limit beträgt normalerweise ein oder zweihunderttausend Zeichen.

getconf ARG_MAX Gibt Ihnen die maximale Eingabegrenze für einen Befehl. Auf dem Debian-System ist derzeit ein Terminal geöffnet, das 131072 Zurückgibt und 128*1024 Ist. Das Limit wird durch Ihre Umgebungsvariablen reduziert. Wenn mein Speicher mir korrekt dient, werden diese von der Shell in derselben Struktur übergeben, obwohl dies in den meisten Fällen nur einige hundert Zeichen entfernt. Um eine Annäherung an diesen Wert zu finden, führen Sie env | wc -c Aus. Dies schlägt derzeit 325 Zeichen für diese Anmeldung auf diesem Computer vor.

Skripte erlauben wahrscheinlich diese volle Länge, aber es ist nicht unwahrscheinlich, dass andere Dienstprogramme absichtlich oder aufgrund von Designproblemen ihre eigenen Grenzen setzen. Es kann auch künstliche Grenzen geben, wie lang ein einzelnes Argument in einer langen Befehlszeile sein kann und/oder wie lang ein Pfad zu einer Datei sein kann.

32
David Spillett

ARG_MAX begrenzt zwar die Gesamtgröße der Befehlszeile und der Umgebung, Sie sehen sich jedoch einer zusätzlichen Einschränkung gegenüber: Ein Argument darf nicht länger als MAX_ARG_STRLEN sein (das leider fest auf 131072 codiert ist).

Siehe https://unix.stackexchange.com/questions/120642/what-defines-the-maximum-size-for-a-command-single-argument

14
Rotsor

Meinen Sie, was ist die längste variable Länge? Um das herauszufinden, können Sie Perls "x" verwenden, um einen sehr langen Variablennamen zu erstellen:

 VAR=`Perl -e 'print "a"x131071'` ; bash a.sh $VAR

Auf meinem System funktioniert 131071:

und die Variable wird bei 131072 gedruckt, sie ist zu groß:

VAR=`Perl -e 'print "a"x131072'` ; bash a.sh $VAR
bash: /bin/bash: Argument list too long
1
davey