On 1/26/21 12:13 PM, Stuart Henderson wrote:
> On 2021/01/26 11:18, Jordan Geoghegan wrote:
>>
>> On 1/26/21 5:47 AM, Stuart Henderson wrote:
>>> On 2021/01/25 00:53, Sebastian Benoit wrote:
>>>> Sebastian Benoit(be...@openbsd.org) on 2021.01.25 00:27:05 +0100:
>>>>> Theo de Raadt(dera...@openbsd.org) on 2021.01.24 16:01:32 -0700:
>>>>>> Stuart Henderson <s...@spacehopper.org> wrote:
>>>>>>
>>>>>>> On 2021/01/24 12:10, Theo de Raadt wrote:
>>>>>>>> I completely despise that the option is called "--null".
>>>>>>>>
>>>>>>>> Someone was a complete idiot.
>>>>>>> gnu grep has both --null and -z for this (why do they do that?!).
>>>>>>> If it's added as --null it should be added as -z too.
>>>>>>>
>>>>>>> Looking at Debian codesearch most things using it as --null use other
>>>>>>> long options that we don't have. Maybe just adding as -z would be
>>>>>>> enough. It does seem a useful and fairly widely supported feature.
>>>>>> Yes, maybe just add -z.
>>>>> Actually it's "-Z, --null". The lowercase -z in gnu grep is
>>>>>
>>>>> -z, --null-data
>>>>> Treat input and output data as sequences of lines, each
>>>>> terminated by a zero byte (the ASCII NUL character) instead of
>>>>> a newline. Like the -Z or --null option, this option can be
>>>>> used with commands like sort-z to process arbitrary file
>>>>> names.
>>>> And we already have -z for "force grep to behave as zgrep".
>>> sigh.. OK I guess we are better skipping the short flag and just use --null
>>>
>>>> Diff below with tedu@ suggestion and changed manpage text.
>>> ok with me. if I was committing I would whine about the stupid flag in
>>> commit log ;)
>>>
>>> [snip]
>> Why is a short flag not being included? '-z' and '-0' are both available in
>> our grep.
> So after sorting out the caps mixups in the quoted text above:
>
> ggrep: -z --null-data
> -Z --null
> grep: -Z zgrep mode
>
> i.e. the flag which is used by other implementations for the same feature is
> already used in our grep for a different non-standard feature. Using a short
> flag for a related but different feature is even worse.
>
> -0 would the obvious "nice" option but now I see why ggrep didn't use
> it for the feature: it's not actually available. It currently specifies
> "print 0 lines of context". That's the same as plain grep with ours, but
> with ggrep it prints -- denoting skipped lines:
>
> $ printf ' 1\n 2\n 2\n 1\n 2\n 1\n' | ggrep -0 2
> 2
> 2
> --
> 2
>
> While it doesn't seem entirely sensible that someone should rely on
> that, it does currently "work" (I could almost understand someone setting
> a variable for lines of context, setting it to 0 to disable context, and
> using "| grep -$whatever"). And dumping NULs into some processing
> pipeline that isn't prepared for them is also not sensible.
>
> Moral of the story: don't rely on extensions to standard tools, write
> your shell scripts in perl instead!
>
Okay, thanks for explaining that Stuart, I guess I didn't realize the depths of
GNU's depravity.
I'm surprised somebody didn't stop and think to themselves when writing this
tidbit in the ggrep manpage for the '-Z, --null' option:
"This option (-Z, --null) can be used with commands like find -print0, perl -0,
sort -z, and xargs -0 ..."
One of those things is not like the others.