【发布时间】:2019-03-25 07:09:54
【问题描述】:
我编写了一个 bash 脚本,下面是给出“参数列表太长”错误的示例 sn-p。
param1=$1
param2=$2
'set ${param1} "${param2}"'
我知道 param2 的大小很大(大约 15MB,也可以更大)。我阅读了几篇关于 ARG_MAX 并将事物分解为更小的组件的帖子。
getconf ARG_MAX
67108864
这里的 ARG_MAX 大小可以轻松容纳至少 15MB 大小的东西。所以我不确定这里到底出了什么问题。另外,我不确定是否可以将此命令分解为更小的块。这只是一次尝试设置整个值的一个命令。
我还运行了以下命令来检查数据限制:
ulimit -d
unlimited
在这里我们也有无限的大小。有谁知道我如何提高操作系统运行这些大命令的限制?我正在使用带有内核:4.18.9 的 CentOS Linux 版本 7.5.1804(核心)。
【问题讨论】:
-
设置15MB数据作为位置参数有什么意义?
-
Linux 当前将参数限制为每个 128kiB。 ARG_MAX 是所有参数的总和。
-
考虑使用 curl -d 使用的模式。 -d 参数让用户将正文指定为字符串或文件(-d@file)。这允许任意长的输入(受文件大小限制)。
-
我赞同@Mark 的建议——参数不是传递大量数据的好方法。使用文件,或者通过标准输入传递数据。
-
您仍在将实际数据作为参数传递。 @Mark 要求的是您让命令接受文件名。这当然是假设您可以控制它。
标签: bash linux-kernel centos7