Je n'arrive pas à savoir si la restriction de longueur s'applique aux buildins shell ou non.
Probablement pas, mais vous devriez vérifier le code source de votre version particulière de bash
(puisqu'il s'agit d'un logiciel libre). Cependant, il y a évidemment une certaine limitation - que l'on espère plus importante - (en particulier parce que certains logiciels de la gamme de produits de l'entreprise ont été modifiés). malloc
fait à l'intérieur bash
pourrait échouer), mais vous obtiendrez alors un autre message d'erreur ou un autre comportement.
A ma connaissance, l'erreur "liste d'arguments trop longue" est donnée par execve(2) à défaut de E2BIG
et les fonctions intégrées de bash ne le font pas. fork
puis execve
(comme le font les programmes externes invoquant des commandes).
En pratique, E2BIG
pourrait apparaître avec quelques centaines de milliers d'octets (la limite exacte dépend du noyau et du système) mais je suppose que les builtins pourraient être utilisés sur plusieurs dizaines de mégaoctets (sur les ordinateurs de bureau d'aujourd'hui). Mais YMMV (puisque vous pourriez utiliser ulimit
pour que votre coquille fasse un peu setrlimit(2) ...). Je ne recommanderai pas de manipuler des gigaoctets de données par le biais de buildins shell.
BTW, xargs(1) peut être utile, et vous pourriez même augmenter la limite (pour les E2BIG
) en recompilant votre noyau (et aussi par d'autres moyens, dans les noyaux récents). Il y a quelques années, c'était une forte motivation pour moi de recompiler les noyaux.