`find` 返回值:查找手册页错误吗?

jof*_*fel 5 find exit-status

find手册页说:

-execdir command {} +始终返回 true,而 -execdir command {} ; 仅当 command 返回 0 时才返回 true。

EXIT STATUS find 如果所有文件都处理成功,则以状态 0 退出,如果发生错误,则大于 0。

但是,如果我对此进行测试,则会得到相反的行为:

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

 $ find . -execdir false '{}' \+ ; echo $?      
 1
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?

-exec而不是-execdir我得到相同的结果。我试过find (GNU findutils) 4.6.04.4.2

Mic*_*mer 7

这个“返回”不是 的退出代码find,而是-execdir用于将多个find动作链接在一起的动作的返回值。如果你试试:

find . -execdir false '{}' \; -print
Run Code Online (Sandbox Code Playgroud)

then-print永远不会执行(即没有输出),而两者:

find . -execdir true '{}' \; -print
find . -execdir false '{}' + -print
Run Code Online (Sandbox Code Playgroud)

打印每条路径。


然而,使用时+的退出代码find 设置:它是非零值,如果该命令的任何调用退出非零,而对于一个;退出代码不受影响(直接地)通过将命令结果。这种行为是通过POSIX需要-exec,我想,以指示故障,否则是无法检测:

如果主要表达式由 a 标点,则主要表达式<plus-sign>应始终评估为真,并且评估主要表达式的路径名应聚合为集合。[...]如果任何调用返回非零值作为退出状态,则查找实用程序应返回非零退出状态

-exec ... \;未指定为影响退出代码,因此find除非出现错误,否则退出零的默认行为适用。-exec ... \;退出非零的命令不被视为错误,因此在没有其他错误的情况下,退出代码将始终为零。