Re: [PATCH] find: add option -fail_exec

Bernhard Voelker <[email protected]>
Newsgroups gmane.comp.gnu.findutils.bugs
Message-ID <[email protected]>
On 5/21/25 19:24, Tavian Barnes wrote:
> On Wed, May 21, 2025 at 1:51 AM Bernhard Voelker
> <[email protected]> wrote:
>> [snip]
>> Although I like in general the idea to have more control over
>> exit values in the caller, I have the suspicion that mapping to
>> EXIT_FAILURE may be too simple:
>>
>> How to distinguish that from other find(1) errors?
>> In your case 0 vs. non-Zero seems to be sufficient.
>> But other / future use cases might need to directly pass back
>> the exit value transparently (or even mapped) to find's exit code?
>> For that, extending your approach might be problematic.
> 
> One idea would be to take the exit status from the command itself.  So if you do
> 
>      $ find -fail_exec -exec sh -c 'cat "$1" || exit 42' sh {} \;
> 
> then find would exit(42) if cat fails.

yes, that was one future possible expansion I was thinking of.

>> For the user, it is already confusing to have so many flavors:
>>         -exec COMMAND ;     -exec COMMAND {} +     -ok COMMAND ;
>>         -execdir COMMAND ;  -execdir COMMAND {} +  -okdir COMMAND ;
>> So adding another one adds complexity.
> 
> Unless I'm misreading it, the given patch doesn't add another variant
> like that, it just adds an option.  So usage would look like
> 
>      $ find -fail_exec -exec false + {}

Ah, yes, you're right.  I misread that completely.

>> On 5/20/25 22:56, Bernhard Voelker wrote:
>>   > So would you please describe further your use cases with some
>>   > examples?
>>
>> P.S. It makes sense looking over the fence as well:
>> does one of the other find(1) implementations have such a feature
>> already, and how is it solved there?
> 
> NetBSD find has -exit [status], so there you could write something like
> 
>      $ find -exec cmd {} \; -o -exit 42
> 
> See https://man.netbsd.org/find.1

Actually I like that:

a) there's precedence in another implementation already,

b) to have a -exit action with exit code is also useful in combination
with other tests:

      # Find world-writable files in $HOME.
      find "$HOME" -not -type l -perm /002 -ls -exit 99;
      case $? in
        0) ;; #fine.
        99) echo UGGH; exit 99;;
        *)  echo 'other find error' >&2; exit 1;
      esac

And -exit without a number is a synonym for -quit.
That's also easy to remember.

Have a nice day,
Berny
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.