web-dev-qa-db-fra.com

Limite de caractères de 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? par exemple:

$ MyScript reallyreallyreally...reallyreallyreallylongoption

Merci.

33
robdog

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 d'entrée maximale pour une commande. Sur le système Debian, j'ai actuellement un terminal ouvert sur ce retour 131072 lequel est 128*1024. La limite est réduite par vos variables d'environnement et si ma mémoire est bonne, elles sont passées dans la même structure par le Shell, bien que cela n'enlèvera 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 cette connexion sur cette machine.

Les scripts autoriseront probablement cette longueur totale, mais il n'est pas improbable que d'autres services publics imposent leurs propres limites, intentionnellement ou par le biais de problèmes de conception. Il peut également y avoir des limites artificielles à la durée d'un argument individuel sur une longue ligne de commande et/ou à la longueur d'un chemin d'accès à un fichier.

32
David Spillett

ARG_MAX limite en effet la taille totale de la ligne de commande et de l'environnement, mais vous faites face à 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

14
Rotsor

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, le 131071 fonctionne:

et la variable est imprimée à 131072 elle est trop grande:

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