Quelle est la longueur maximale des arguments en ligne de commande dans gnome-terminal?


Réponses:


32

xargssait. Sur mon système,

$ xargs --show-limits
Your environment variables take up 2572 bytes
POSIX upper limit on argument length (this system): 2092532
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2089960
Size of command buffer we are actually using: 131072

5
Pour développer cela, la limite ne se trouve pas dans le terminal, mais dans le noyau (et dans le shell également, mais je pense que la limite du shell par défaut (bash) est aussi élevée que la limite du noyau). En outre, xargsnon seulement pour signaler la limite, mais aussi (principalement) pour la contourner - voir la page de manuel ou une autre documentation.
Gilles, arrête de faire le mal

1
J'aime cette réponse, en particulier à cause de la sortie "pourrait en fait utiliser" ... Je l'ai un peu transformée et j'ai proposé cette variante de commande pour isoler la valeur "réellement" ... (peut-être qu'il y a un moyen plus simple, mais bon, ça marche et convient pour un scénario:xargs --show-limits --no-run-if-empty < /dev/null 2>&1 |sed -n "/could actually use/s/.*: \\([0-9]\+\\)/\1/p"
Peter.O,

Étrangement, xargs semble compter deux fois la limite d'environnement dans la limite POSIX (limite POSIX = ARG_MAX - 2048 (réserve) - envvars).
Tobu

18

La réponse provient de la valeur sysconfARG_MAX . Pour l'examiner sur votre système:

getconf ARG_MAX

Pour moi, cela rapporte 2097152. Pour plus de détails, consultez la page de manuel:

man sysconf

Pour insérer cela dans un programme, par exemple:

#include <unistd.h>
...
printf("%ld\n", sysconf(_SC_ARG_MAX));

1
Merci KC .. +1; un moyen astucieux d’obtenir le MAX absolu, mais j’ai préféré la méthode xargs à cause de son facteur "réellement disponible" ... car j’étais en fait après une valeur d’exécution (mais je n’ai pas mentionné cela :(
Peter .O

0

Je ne connais pas vraiment gnome-terminal, mais le shell n'a pas de limite 'fixe', mais la limite de pile.

Cependant, il existe une limite par code fixe par argument de 128 Ko. Cela ne devrait pas poser de problème si vous n'utilisez pas de "très très très longs arguments ...".

Vous pouvez en savoir plus à ce sujet ici:

http://www.mail-archive.com/bug-make@gnu.org/msg05522.html

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.