Lösung 1:
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 habe ich derzeit ein Terminal geöffnet, auf dem 131072
zurückgegeben wird das ist 128*1024
. Das Limit wird durch Ihre Umgebungsvariablen reduziert und wenn ich mich richtig erinnere, werden diese in der gleichen Struktur von der Shell übergeben, obwohl das in den meisten Fällen nur ein paar hundert Zeichen entfernt. Um eine Annäherung an diesen Wert zu finden, führen Sie env | wc -c
aus - Dies schlägt zum aktuellen Zeitpunkt 325 Zeichen bei dieser Anmeldung auf diesem Computer vor.
Skripte werden wahrscheinlich diese volle Länge zulassen, aber es ist nicht unwahrscheinlich, dass andere Dienstprogramme entweder absichtlich oder aufgrund von Designproblemen ihre eigenen Grenzen auferlegen. 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.
Lösung 2:
ARG_MAX begrenzt tatsächlich die Gesamtgröße der Befehlszeile und der Umgebung, aber Sie sehen sich einer zusätzlichen Einschränkung gegenüber:Ein Argument darf nicht länger als MAX_ARG_STRLEN sein (was leider fest auf 131072 codiert ist).
Siehe https://unix.stackexchange.com/questions/120642/what-defines-the-maximum-size-for-a-command-single-argument
Lösung 3:
Meinst du, was ist die längste variable Länge? Um das herauszufinden, können Sie das "x" von Perl 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 ausgegeben, sie ist zu groß:
VAR=`perl -e 'print "a"x131072'` ; bash a.sh $VAR
bash: /bin/bash: Argument list too long