bash 命令可以有多长?
How long can a bash command be?
我记得在 ksh
中使用旧的 mid运行ge 并动态构建命令 运行 我在缓冲区中可用的 2kb。
我最近遇到一个问题,一个可能的简单修复可能会创建带有很多长参数的非常长的命令。一位同事问现代 bash
的极限是多少,我突然想到我不知道。搜索似乎都偏离了历史缓冲区中的行数,但这与此处无关。
所以我运行做了一些测试(请检查我的逻辑...)
time echo $( printf "%01024d" $( seq 1 $max ) ) | wc -c
我运行几个简单的测试就大获成功。即使在我笔记本电脑的 git bash
仿真上,如果我 运行 使用 max=32
我会得到
$: time echo $( printf "%01024d" $( seq 1 $max ) ) | wc -c
32769
real 0m0.251s
user 0m0.061s
sys 0m0.215s
这是一个 echo
后跟 32 个 1kb 字符串作为 space 分隔参数,通过管道传输到 wc -c
报告接收到的适当字节数,大约四分之一秒。不用说我很高兴和惊讶,所以我开始加倍 max
寻找上限......但失败了。看看这个。
max=40960
$: time echo $( printf "%01024d" $( seq 0 40960 ) ) | wc -c
41944065
real 0m10.985s
user 0m4.117s
sys 0m7.565s
处理时间为 11 秒,但这是一个 41MB 的命令行,已成功创建、加载、执行和解析。
天哪...这个规格的上限是多少???
And/or 是否有某种原因表明此测试不能很好地证明我可以构建几乎任意长的命令?
主要问题的简短回答是:
命令行长度的限制不是由shell强加的,而是由操作系统强加的。此限制通常在百千字节范围内。
我记得在 ksh
中使用旧的 mid运行ge 并动态构建命令 运行 我在缓冲区中可用的 2kb。
我最近遇到一个问题,一个可能的简单修复可能会创建带有很多长参数的非常长的命令。一位同事问现代 bash
的极限是多少,我突然想到我不知道。搜索似乎都偏离了历史缓冲区中的行数,但这与此处无关。
所以我运行做了一些测试(请检查我的逻辑...)
time echo $( printf "%01024d" $( seq 1 $max ) ) | wc -c
我运行几个简单的测试就大获成功。即使在我笔记本电脑的 git bash
仿真上,如果我 运行 使用 max=32
我会得到
$: time echo $( printf "%01024d" $( seq 1 $max ) ) | wc -c
32769
real 0m0.251s
user 0m0.061s
sys 0m0.215s
这是一个 echo
后跟 32 个 1kb 字符串作为 space 分隔参数,通过管道传输到 wc -c
报告接收到的适当字节数,大约四分之一秒。不用说我很高兴和惊讶,所以我开始加倍 max
寻找上限......但失败了。看看这个。
max=40960
$: time echo $( printf "%01024d" $( seq 0 40960 ) ) | wc -c
41944065
real 0m10.985s
user 0m4.117s
sys 0m7.565s
处理时间为 11 秒,但这是一个 41MB 的命令行,已成功创建、加载、执行和解析。
天哪...这个规格的上限是多少???
And/or 是否有某种原因表明此测试不能很好地证明我可以构建几乎任意长的命令?
主要问题的简短回答是:
命令行长度的限制不是由shell强加的,而是由操作系统强加的。此限制通常在百千字节范围内。