Shell-Variable Kapazität
Angenommen ich habe ein shell-Skript, in dem es eine Aussage wie :
a=$(find / -type f)
Dieser sagt, es gibt eine bestimmte Liste von Dateien, die Ihre Datei-Pfade, die gespeichert wird in der variable 'a'.
Was ist das maximale limit oder die Anzahl der Zeilen, die Sie speichern können. Wie finde ich es?
pedantisch, in Schalen, verwenden
$()
Sie können keine Leerzeichen um den =
InformationsquelleAutor Vijay | 2011-02-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
IIRC, bash nicht zu verhängen eine Obergrenze für Daten eine variable speichern kann. Es wird jedoch begrenzt durch die Umgebung, in der bash ausgeführt wurde, unter. Sehen diese Antwort eine ausführliche Erläuterung.
InformationsquelleAutor Shawn Chin
Ich glaube nicht, dass es ein limit für variable Größe in der bash, aber tun Sie wirklich möchte eine 6GB-variable in Ihrer shell (suject zu
ulimit -a
natürlich)?Sicherlich gibt es eine Begrenzung der Kommandozeile.
grep <pattern> $TEN_MILLION_FILENAMES
ist nicht zur Arbeit gehen. In der Tat, es ist sehr schwer zu tun, jedem Befehl laichen mit$TEN_MILLION_FILES
. Sie brauchen andere Strategien, wie es zu tun pro Verzeichnis, oder temporäre Dateien &c.InformationsquelleAutor bobbogo
Als ich weiß, der einzige Weg zu finden, die Grenze ist durch eine empirische Art und Weise. Versuchen, führen Sie das folgende shell-Skript und warten, bis fertig stellen:
InformationsquelleAutor FerranB
Als einen Datenpunkt, habe ich versucht, das folgende Skript in OS X 10.10.5, über die eingebauten bash-auf einem Macbook Pro Retina mit einem 2,8 GHz Intel Core i7:
Ergebnisse: die Größe gerne noch einmal verdoppelt und wieder (beachten Sie, dass die Größen umfassen ein zusätzliches byte für den single-line-Ende). Die Dinge begannen sich zu verlangsamen, wenn
humombo
übergeben 4MB; Verdoppelung von 256MB zu 512MB dauerte 48 Sekunden, und das Skript explodierte danach:Zwei Hinweise:
Ich vermute, dass der Absturz war mehr, dass der ganze Prozess hat zu viel Speicher, anstatt ich auf die Beschränkung einer einzigen variable Kapazität.
Beim spielen mit diesem, lief ich die gleichen Befehle interaktiv, und wenn die Schleife beendet bash war gebrochen; ich hatte, um öffnen Sie ein neues terminal-Fenster, um alles zu tun. So, viel zu viel memory allocation bricht bash in unbekannte Wege; meine Vermutung ist, dass es innerhalb eines Skripts löscht beim beenden.
Bearbeiten: ich habe gerade versucht den gleichen code auf einem high-Power-Ubuntu-18:
Dauerte es weniger als die Hälfte der Zeit, und starb ein wenig mehr sauber, aber in der gleichen Schriftgröße. (BTW, die Zahl in der Fehlermeldung, dezimal 18446744071562068096, ist 0xffff ffff 8000 0080, so ist klar, dass wir schlagen eine Anzahl Kapazität limits hier).
InformationsquelleAutor Daniel Griscom
Soweit ich sehe, standard erlegt keine Einschränkungen. Aber das zugrunde liegende system kann. Ich erinnere mich, ich habe einmal stieß eine Beschränkung auf einige AIX.
Können Sie überprüfen, wie die Konfiguration von Prüfungen für die maximale Anzahl der Argumente - versuchen, bis Sie einen Fehler finden. Eine Art iterativen Ansatz mit Formel
var(i)=concatenation(var(i-1),var(i-1))
. Früher oder später werden Sie auf die Beschränkung (zumindest memory-limit während der Behandlung).InformationsquelleAutor