在bash和bourne shell中,可以传递给sh -c''
的命令行长度有多长?
这个限制比操作系统的限制要低得多(在现代Linux的情况下)。
例如:
$ /bin/true $(seq 1 100000)
$ /bin/sh -c "/bin/true $(seq 1 100000)"
bash: /bin/sh: Argument list too long
我该如何规避这个问题?
更新
我想指出getconf
不能帮助解决这个问题(因为那不是系统限制):
$ seq 1 100000 | wc -c
588895
$ getconf ARG_MAX
2097152
更新#2
现在我明白了这里的重点。那不是一个shell限制,而是一个系统限制,但是限制的是每个参数的长度,而不是整个参数列表的长度。
$ /bin/true $(seq 1 100000)
$ /bin/true "$(seq 1 100000)"
bash: /bin/true: Argument list too long
感谢CodeGnome对此进行了解释。