Solución 1:
El límite impuesto por shell/SO suele ser de uno o doscientos mil caracteres.
getconf ARG_MAX
le dará el límite máximo de entrada para un comando. En el sistema Debian, actualmente tengo un terminal abierto en este devuelve 131072
que es 128*1024
. El límite se reduce por las variables de entorno y, si mi memoria no me falla, el shell las pasa en la misma estructura, aunque eso solo eliminará unos pocos cientos de caracteres en la mayoría de los casos. Para encontrar una aproximación de este valor, ejecute env | wc -c
- esto sugiere 325 caracteres en el momento actual en este inicio de sesión en esta máquina.
Es probable que los scripts permitan esta longitud completa, pero no es improbable que otras utilidades impongan sus propios límites, ya sea intencionalmente o por problemas de diseño. También puede haber límites artificiales sobre la duración de un argumento individual en una línea de comando larga y/o la duración de la ruta a un archivo.
Solución 2:
De hecho, ARG_MAX limita el tamaño total de la línea de comando y el entorno, pero se enfrenta a una limitación adicional:un argumento no debe ser más largo que MAX_ARG_STRLEN (que desafortunadamente está codificado para ser 131072).
Consulte https://unix.stackexchange.com/questions/120642/what-defines-the-maximum-size-for-a-command-single-argument
Solución 3:
¿Quiere decir cuál es la longitud variable más larga? Para averiguarlo, puede usar la "x" de perl para crear un nombre de variable muy largo:
VAR=`perl -e 'print "a"x131071'` ; bash a.sh $VAR
En Mi sistema 131071 funciona:
y la variable se imprime en 131072 es demasiado grande:
VAR=`perl -e 'print "a"x131072'` ; bash a.sh $VAR
bash: /bin/bash: Argument list too long