对于 Linux bash 参数过长错误 “Argument list too long” 网上有很多解决方案,但并没有解释这个最大长度的值的范围。本着追根溯源的态度,记录下限制参数长度的因素以及最大长度。
参数最大长度
如何确认Linux bash中能接受的最大长度呢?
参考ARG_MAX, maximum length of arguments for a new process
从以上文献中能看出在Linux2.6.23内核以后参数长度最长不能超过MAX_ARG_STRLEN
MAX_ARG_STRLEN
在<linux/binfmts.h>
中定义为:
#define MAX_ARG_STRLEN (PAGE_SIZE * 32)
验证
如下图验证所示:
可以通过getconf PAGE_SIZE
获取内存页大小。
通过echo $(( $(getconf PAGE_SIZE)*32 ))
得到 MAX_ARG_STRLEN
值,
通过边界值 131071 进行验证:
/bin/echo "$(printf "%*s" 131071 "a")">/dev/null
结果符合我们的预测。