金笛邮件论坛

金笛邮件论坛 (http://bbs.mailer.cn/)
-   金笛邮件售后服务专区 (http://bbs.mailer.cn/f1/)
-   -   一个shell问题 (http://bbs.mailer.cn/t150/)

s0z0y 2009-07-10 09:26

一个shell问题
 
遇到这样一个实际问题,一个目录下有10000个文件,如果我从中查找包含 pattern的字符串,直接使用 grep "pattern" * 会报参数太长不能执行;而使用 ls | xargs grep "pattern" 则没有问题。

事实上"参数太长不能执行"这是由shell(bash环境) 报出来的,而非grep命令。
我在 rhel5 上(bash版本 3.1.17) 验证最多参数长度是 23534个。
在 fc 9 上 (bash版本 3.2.33) 最多参数长度在 39万到40万之间。

xargs 把这些参数直接交给了调用的程序,而不再通过bash。当超出bash 限定的最大参数时,也不再检查。
至于能否接受这么多的参数,就看命令本身怎么实现了, grep pattern files[] 按我的理解(也是主观臆测) files[] 的长度应该是一个int类型的最大长度/2(排除负数)。即2^30个。


所有时间均为北京时间。现在的时间是 00:05

Powered by vBulletin® 版本 3.8.3
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.