`find`戻り値:検索マニュアルページが正しくありませんか?

`find`戻り値:検索マニュアルページが正しくありませんか?

マニュアルfindページには次のように記載されています。

-execdir command {} +常に true を返しますが、 -execdir command {} ; コマンドが 0 を返す場合にのみ true を返します。

そして

終了ステータス すべてのファイルが正常に処理されると、find は状態 0 で終了し、エラーが発生すると状態は 0 より大きくなります。

しかし、これをテストすると、反対の動作が表示されます。

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

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

誰かがこれを説明できますか?

-exec代わりに使用すると、-execdir同じ結果が得られます。私は努力find (GNU findutils) 4.6.0しました4.4.2

答え1

この「戻り値」は、終了コードではなく、複数のジョブを一緒にリンクするために使用されるジョブの戻り値ですfind。しようとした場合:-execdirfind

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

その後、-print実行されません(つまり、出力はありません)。一方、両方:

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

各パスを印刷します。


ただし、+終了コードを使用する場合find はいset: コマンド呼び出しが 0 以外の状態で終了すると 0 ではなく、a の場合、;終了コードはコマンド結果に (直接的に) 影響を受けません。そのような行動POSIXの要件-exec場合、検出できないエラーを指摘したいと思います。

基本式がaで区切られている場合、基本式は<plus-sign>常にtrueと評価され、基本式を評価するパス名はコレクションに集約する必要があります。 [...]呼び出しが終了ステータスとしてゼロ以外の値を返す場合、検索ユーティリティはゼロ以外の終了ステータスを返す必要があります。

-exec ... \;終了コードに影響を与えるように指定されていないため、findデフォルトの動作はエラーが発生しない限りゼロを終了することです。-exec ... \;ゼロ以外の値で終了するコマンドはエラーと見なされないため、他のエラーがなければ、終了コードは常にゼロになります。

関連情報