60 votes

Limite de caractères de la ligne de commande Linux

Je passe une variable à un script sur la ligne de commande. Quelle est la limite de caractères d'une commande ? ex :

$ MyScript reallyreallyreally...reallyreallyreallylongoption

Merci.

64voto

David Spillett Points 22424

La limite imposée par Shell/OS est généralement de un ou deux cent mille caractères.

getconf ARG_MAX vous donnera la limite maximale d'entrée pour une commande. Sur le système Debian, j'ai actuellement un terminal ouvert sur ces retours 131072 qui est 128*1024 . La limite est réduite par vos variables d'environnement et, si ma mémoire est bonne, celles-ci sont transmises dans la même structure par le Shell, bien que cela n'enlève que quelques centaines de caractères dans la plupart des cas. Pour trouver une approximation de cette valeur, exécutez env | wc -c - cela suggère 325 caractères à l'heure actuelle sur ce login sur cette machine.

Les scripts sont susceptibles d'autoriser cette longueur totale, mais il n'est pas improbable que d'autres utilitaires imposent leurs propres limites, soit intentionnellement, soit en raison de problèmes de conception. Il peut également y avoir des limites artificielles à la longueur d'un argument individuel sur une longue ligne de commande, et/ou à la longueur d'un chemin d'accès à un fichier.

28voto

Rotsor Points 311

ARG_MAX limite en effet la taille totale de la ligne de commande et de l'environnement, mais vous êtes confronté à une limitation supplémentaire : un argument ne doit pas être plus long que MAX_ARG_STRLEN (qui est malheureusement codé en dur à 131072).

Voir https://unix.stackexchange.com/questions/120642/what-defines-the-maximum-size-for-a-command-single-argument

4voto

Carling Points 229

Voulez-vous dire quelle est la plus grande longueur de variable ? Pour le savoir, vous pouvez utiliser la fonction "x" de perl pour créer un nom de variable très long :

 VAR=`perl -e 'print "a"x131071'` ; bash a.sh $VAR

Sur mon système, 131071 fonctionne :

et la variable est imprimée à 131072 c'est trop grand :

VAR=`perl -e 'print "a"x131072'` ; bash a.sh $VAR
bash: /bin/bash: Argument list too long

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X