Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 25 Dec 2002 09:02:07 -0500
From:      "Bill Moran" <bill_moran2@hotmail.com>
To:        grog@FreeBSD.org
Cc:        questions@freebsd.org
Subject:   Re: Argument list too long: limitation in grep? bash? FreeBSD?
Message-ID:  <F25p7Jl3Oh3Quct2Dsk00019655@hotmail.com>

next in thread | raw e-mail | index | archive | help
>From: Greg 'groggy' Lehey <grog@FreeBSD.org>
>On Tuesday, 24 December 2002 at 17:25:23 -0500, Bill Moran wrote:
> > d/l the entire php documentation as individual html files.
> > This equates to a LOT of files in a single directory (how can
> > I get a count of this?)
> > Anyway, I'm trying to find the docs on some features that
> > the www.php.net's search isn't really helping on (searching
> > for __FILE__ doesn't search for __FILE__ ... it searches for
> > file, and there's too many results) so I try:
> > grep __FILE__ *.html
> > and I get the error:
> > -bash: /usr/bin/grep: Argument list too long
> > Is this a shortcoming of bash, grep or FreeBSD?  I'm assuming
> > it's not grep, as the command:
> > find . -name *.html -print | xargs grep __FILE__
> > yeilds:
> > -bash: /usr/bin/find: Argument list too long
>
>Well, it's not a shortcoming.  These argument lists get passed into
>the kernel by execve(), which changes the process image.  There's only
>a certain size you can put in.

Understood.  Perhaps 'shortcoming' wasn't the correct word to use,
as it's a designed limitation.  It sure feels like a shortcoming
when you're just trying to find the page with the docs you need ;)

> > I did a little research, and Linux has the MAX_ARG_PAGES kernel
> > option to increase the size of the command line arguments it can
> > process ... does FreeBSD have such a kernel option,
>
>Well, we used to have an ARGSMAX variable, but it has now been
>replaced by a sysctl kern.argmax.  It's set to 65536 by default.  You
>could increase it, but at some point you'll always run into problems.
>You can't make it longer than physical memory, for example.

Here we go!  This is incredibly useful.  It tells me exactly what I
need to know.  Thanks Greg.

> > or some other way of overcoming this limit?
>
>That's what the xargs program is for.  You just used it incorrectly.
>It should be:
>
>  find . -name '*.html' -print | xargs grep __FILE__
>
>Putting the '' around the name stops the shell from trying to expand
>it.

Ahhh ... so (making sure to understand this information so I can use
it again later) the quotes tell find to expand the pattern, without
quotes the shell tries to do it and results in the mentioned error.

I used the '' method, as I normally have no need to hunt around in
directories this big.  But it's good to know that the sysctl is
there, in case I ever want to use it.

-Bill


_________________________________________________________________
MSN 8 with e-mail virus protection service: 3 months FREE*. 
http://join.msn.com/?page=features/virus&xAPID=42&PS=47575&PI=7324&DI=7474&SU= 
http://www.hotmail.msn.com/cgi-bin/getmsg&HL=1216hotmailtaglines_eliminateviruses_3mf


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?F25p7Jl3Oh3Quct2Dsk00019655>