`find` valeur de return: la page de search est-elle incorrecte?

La page find man indique:

-execdir command {} + renvoie toujours true, tandis -execdir command {} ; renvoie true uniquement si la command renvoie 0.

et

EXIT STATUS trouve exit avec l'état 0 si tous les files sont traités avec succès, supérieur à 0 en cas d'erreur.

Mais si je teste cela, j'ai le comportement inverse:

  $ find . -execdir false '{}' \; ; echo $? 0 $ find . -execdir false '{}' \+ ; echo $? 1 

Quelqu'un peut-il expliquer cela?

Avec -exec au lieu de -execdir j'obtiens les mêmes résultats. J'ai essayé de find (GNU findutils) 4.6.0 et 4.4.2 .

Ce "return" n'est pas le code de sortie de find , mais la valeur de return de l'action -execdir dans le but d'enstringr plusieurs actions de find set. Si tu essayes:

 find . -execdir false '{}' \; -print 

alors -print ne s'exécute jamais (c'est-à-dire qu'il n'y a pas de sortie), alors que les deux:

 find . -execdir true '{}' \; -print find . -execdir false '{}' + -print 

imprimer chaque path.


Cependant, en utilisant + le code de sortie de find est défini: il est différent de zéro si une invocation de la command sort non-nulle, alors que pour a ; le code de sortie n'est pas affecté (directement) par les résultats de la command. Ce comportement est requirejs par POSIX pour -exec , je suppose pour indiquer les échecs qui autrement seraient indétectables:

Si l'expression primaire est ponctuée par un <plus-sign> , le primaire doit toujours être considéré comme vrai et les paths pour lesquels le primaire est évalué doivent être agrégés en sets. […] Si un appel renvoie une valeur différente de zéro en tant qu'état de sortie, l'utilitaire de search doit renvoyer un état de sortie différent de zéro .

-exec ... \; n'est pas spécifié comme affectant le code de sortie, donc le comportement par défaut de la sortie de zéro à less qu'une erreur ne s'applique. Un -exec ... \; la command sortant de zéro n'est pas considérée comme une erreur, donc en l'absence d'une autre erreur, le code de sortie sera toujours zéro.