マニュアル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
。しようとした場合:-execdir
find
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 ... \;
ゼロ以外の値で終了するコマンドはエラーと見なされないため、他のエラーがなければ、終了コードは常にゼロになります。