grep is always recursive
Loïc Grenié
loic.grenie at gmail.com
Wed Jan 28 13:51:57 UTC 2009
2009/1/28 Hal Burgiss <hal at burgiss.net>:
> On Tue, Jan 27, 2009 at 11:15:00PM -0400, Derek Broughton wrote:
>>
>> It's hardly fair to blame "Gnu" (or Linux, or *nix systems in
>> general). It's possible to use practically anything for a file
>> name. otoh, it is not _practical_ to use anything possible for a
>> filename. Linux does a better job than some other OS's at handling
>> non-alphas in filenames, but it still isn't smart to use them as the
>> leading character.
>
> I understand that. I never would intentionally name a file like that.
> I have 12,800 files in ~, I never (or rarely) look at file listings
> visually. I use things like find and grep. This one was surely the
> result of some long forgotten command run amuck. It has been a thorn
> in my side for months. Had I known about it, it would not have been
> there for long.
>
>> > grep [OPTIONS] PATTERN [FILE...]
>> > grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
>> >
>> > says anything other than OPTIONS come before PATTERN and FILEs come
>> > after. There clearly are ways to impart variable syntax.
>>
>> Except that conventionally man pages do _exactly_ that - and yet
>> options are not (normally) restricted to being before non-option
>> arguments. So your suggestion does not remove the problem. You
>> could use a BNF representation, but at the cost of making it
>> significantly harder to understand for most of the people who need
>> the man page.
>
> a) I think overwhelmingly most people would look at that syntax and
> say OPTIONS comes before files. Without having to consult aging Unix
> masters for the finer points in implied man page synopsis
> interpretation. At some level, documentation should be clear, not
> implied or deduced. A personal opinion, of course.
>
> b) I have read man man, and man grep and have not seen a hint that
> this syntax should be interpreted in any way other than how it
> logically reads (ie how I read it :). Possibly, the explanation is
> there explicitly, hinted at, or ambiguously stated, but if so, I
> missed it. If not, it would not take much just say in the description
> "put options anywhere you feel like on the command line" or whatever.
> One sentence wouldn't muddy the works.
I my man -L C grep I find:
ENVIRONMENT VARIABLES
[snip]
POSIXLY_CORRECT
If set, grep behaves as POSIX.2 requires; otherwise, grep
behaves more like other GNU programs. POSIX.2 requires that
options that follow file names must be treated as file names; by
default, such options are permuted to the front of the operand
list and are treated as options. Also, POSIX.2 requires that
unrecognized options be diagnosed as "illegal", but since they
are not really against the law the default is to diagnose them
as "invalid". POSIXLY_CORRECT also disables
_N_GNU_nonoption_argv_flags_, described below.
_N_GNU_nonoption_argv_flags_
(Here N is grep's numeric process ID.) If the ith character of
this environment variable's value is 1, do not consider the ith
operand of grep to be an option, even if it appears to be one.
A shell can put this variable in the environment for each
command it runs, specifying which operands are the results of
file name wildcard expansion and therefore should not be treated
as options. This behavior is available only with the GNU C
library, and only when POSIXLY_CORRECT is not set.
I personally don't like that behavio[u]r either (and I've been Unixy since
Sep 90, which makes me a relatively long timer). Personal taste I
suspect...
Aaaaanyway,
Loïc
More information about the ubuntu-users
mailing list