我将一个variables传递给命令行上的脚本。 什么是命令的字符限制? 例如:
$ MyScript reallyreallyreally...reallyreallyreallylongoption
谢谢。
shell/操作系统的限制通常非常长 – 通常是一二十万个字符。
getconf ARG_MAX会给你一个命令的最大input限制。 在Debian系统上,我现在有一个terminal打开,返回131072,这是128 * 1024。 这个限制被你的环境variables所减less,好像我的内存正确地为我服务,这些都是由shell在同一个结构中传递的,尽pipe在大多数情况下这只会传递几百个字符。 要find此值的近似值,请运行env | wc -c env | wc -c – 这意味着在这台机器上login时,当前时间为325个字符。
脚本可能允许这么长的一段时间,但是其他公用事业公司也不可能故意地或通过devise问题强加自己的限制。 长命令行上的单个参数可能长达多长,以及/或者文件path可能长达多长时间,也可能存在人为限制。
ARG_MAX实际上限制了命令行和环境的总大小,但是你面临着一个额外的限制:一个参数不能超过MAX_ARG_STRLEN(不幸被硬编码为131072)。
你是指什么是最长的可变长度? 为了解决这个问题,你可以使用perl的“x”来创build一个非常长的variables名称:
VAR=`perl -e 'print "a"x131071'` ; bash a.sh $VAR
在我的系统上131071的作品:
并在131072打印variables太大了:
VAR=`perl -e 'print "a"x131072'` ; bash a.sh $VAR bash: /bin/bash: Argument list too long