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.
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.
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.
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
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.