该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.0和4.4.2。
这个“返回”不是 的退出代码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 ... \;退出非零的命令不被视为错误,因此在没有其他错误的情况下,退出代码将始终为零。