
Ich versuche, einen Befehl mit einem SEHR großen Argument (1 MB groß) einzugeben, aber es wird angezeigt: „Argumentliste zu lang.“ Wie kann ich dieses Argument eingeben?
Betriebssystem: Linux Ubuntu
Antwort1
Es gibt keine Möglichkeit, ein Argument zwischen ausführbaren Dateien zu übergeben, wenn es größer ist als die Grenze des Kernels ARG_MAX
.
Wenn Sie eineListe vonWenn Sie zu lange Argumente haben, können Sie diese beispielsweise mit in kleinere Teile aufteilen xargs
. Dadurch wird der Befehl so oft wie nötig ausgeführt und es werden so viele Argumente bereitgestellt, wie hineinpassen.
Die Syntax ist xargs command <file
. Wenn Sie weglassen command
, werden die Argumente wie angezeigt echo
.
Als Demo
xargs -n 4 </etc/motd
druckt die ersten vier Token in einer Zeile (erster Aufruf), die nächsten vier bis zur nächsten usw. (Das -n
Argument legt eine maximale Anzahl von Argumenten fest, daher wird das ARG_MAX
Limit hier überhaupt nicht verwendet.)
Wenn der Befehl, den Sie ausführen möchten, unerwünschte Nebenwirkungen hat, funktioniert dies möglicherweise nicht. Wenn beispielsweise command
eine bereits vorhandene Datei überschrieben wird ./a.out
, bleiben Ihnen nach Abschluss natürlich nur die Ergebnisse des letzten Laufs.
Wenn Sie es so konfigurieren oder ändern können, command
dass es eine Datei oder Standardeingabe statt eines Befehlszeilenarguments liest, können Sie die Einschränkung umgehen. Eine Datei oder ein Stream kann viel größer sein als ARG_MAX
und ist es oft auch.