Ich versuche, einen Befehl mit SEHR großem Argument (1 MB groß) einzugeben, aber es heißt „Argument list too long“. Wie kann ich dieses Argument eingeben?
Betriebssystem:Linux Ubuntu
Akzeptierte Antwort:
Es gibt keine Möglichkeit, ein Argument zwischen ausführbaren Dateien zu übergeben, wenn es größer als der ARG_MAX
des Kernels ist begrenzen.
Wenn Sie eine Liste von haben Argumente, die zu lang sind, kann eine Aufteilung in kleinere Teile erfolgen, z. mit xargs
. Dies führt den Befehl so oft wie nötig aus und liefert so viele Argumente, wie passen.
Die Syntax ist xargs command <file
. Wenn Sie command
weglassen , zeigt es seine Argumente an, wie echo
.
Als Demo,
xargs -n 4 </etc/motd
druckt die ersten vier Tokens in einer Zeile (erster Aufruf), die nächsten vier durch eine weitere usw. (Der -n
Argument legt eine maximale Anzahl von Argumenten fest, daher wird ARG_MAX
nicht verwendet Grenze überhaupt.)
Wenn der Befehl, den Sie ausführen möchten, Nebenwirkungen hat, die unerwünscht sind, funktioniert dies möglicherweise nicht. Wenn beispielsweise der command
überschreibt alle zuvor vorhandenen ./a.out
Datei, werden Sie offensichtlich nur mit den Ergebnissen des letzten Durchlaufs zurückgelassen, nachdem dieser beendet ist.
Wenn Sie command
konfigurieren oder ändern können Daher wird anstelle eines Befehlszeilenarguments eine Datei oder Standardeingabe gelesen, mit der die Einschränkung umgangen werden kann. Eine Datei oder ein Stream kann viel größer als ARG_MAX
sein , und ist es oft.