Solution 1 :
La limite imposée par le shell/le système d'exploitation est généralement de un ou deux cent mille caractères.
getconf ARG_MAX
vous donnera la limite d'entrée maximale pour une commande. Sur le système Debian, j'ai actuellement un terminal ouvert sur cela renvoie 131072
qui est 128*1024
. La limite est réduite par vos variables d'environnement et si ma mémoire est bonne, elles sont transmises dans la même structure par le shell, bien que cela ne supprime 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 autoriseront probablement cette longueur complète, mais il n'est pas improbable que d'autres utilitaires imposent leurs propres limites, soit intentionnellement, soit par des 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.
Solution 2 :
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 pour être 131072).
Voir https://unix.stackexchange.com/questions/120642/what-defines-the-maximum-size-for-a-command-single-argument
Solution 3 :
Voulez-vous dire quelle est la longueur variable la plus longue ? Pour comprendre cela, vous pouvez utiliser le "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 gros :
VAR=`perl -e 'print "a"x131072'` ; bash a.sh $VAR
bash: /bin/bash: Argument list too long