linux bin bash的参数,bash – 当传递引用的参数时,为什么我得到“/ bin / sh:参数列表太长”?...

TL; DR

单个参数必须短于MAX_ARG_STRLEN.

分析

And as additional limit since 2.6.23,one argument must not be longer than MAX_ARG_STRLEN (131072). This might become relevant if you generate a long call like “sh -c ‘generated with long arguments'”.

这正是OP所确定的“问题”.虽然允许的参数数量可能相当大(参见getconf ARG_MAX),当您将引用的命令传递给/ bin / sh时,shell会将引用的命令解释为单个字符串.在OP的示例中,这个单个字符串超出MAX_ARG_STRLEN限制,而不是扩展参数列表的长度.

实施具体

参数限制是具体的实现.然而,this Linux Journal article提出了几种解决方法,包括增加系统限制.这可能不直接适用于OP,但它在一般情况下仍然有用.

做其他事情

OP的问题实际上并不是一个真正的问题.这个问题正在强加一个不能解决现实问题的任意约束.

您可以使用循环轻松解决这个问题.例如,Bash 4:

for i in {1..100000}; do /bin/sh -c "/bin/true $i"; done

工作很好它肯定会很慢,因为您在每次循环中产生一个进程,但它肯定会绕过您遇到的命令行限制.

描述你的真正问题

如果一个循环不能解决您的问题,请更新该问题以描述您实际使用真正长的参数列表解决的问题.探索任意行长限制是一个学术活动,而不是Stack Overflow的主题.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值