J'essaie d'entrer une commande avec un TRÈS gros argument (taille de 1 Mo), mais il dit "Liste d'arguments trop longue". Comment puis-je saisir cet argument ?
Système d'exploitation :Linux Ubuntu
Réponse acceptée :
Il n'y a aucun moyen de passer un argument entre les exécutables s'il est plus grand que le ARG_MAX
du noyau limite.
Si vous avez une liste de arguments qui sont trop longs, le diviser en plus petits morceaux peut être fait, par ex. avec xargs
. Cela exécute la commande autant de fois que nécessaire, en fournissant autant d'arguments que nécessaire.
La syntaxe est xargs command <file
. Si vous omettez la command
, il affiche ses arguments, comme echo
.
En tant que démo,
xargs -n 4 </etc/motd
imprimera les quatre premiers jetons sur une ligne (première invocation), les quatre suivants sur une autre, etc. (Le -n
argument définit un nombre maximum d'arguments, donc cela n'utilise pas le ARG_MAX
limite du tout.)
Si la commande que vous souhaitez exécuter a des effets secondaires indésirables, cela peut ne pas fonctionner. Par exemple, si la command
écrasera tout ./a.out
existant précédemment fichier, il ne vous restera évidemment que les résultats de la dernière exécution une fois celle-ci terminée.
Si vous pouvez configurer ou modifier la command
il lit donc un fichier, ou une entrée standard, au lieu d'un argument de ligne de commande, qui contournera la restriction. Un fichier ou un flux peut être beaucoup plus volumineux que ARG_MAX
, et c'est souvent le cas.