手册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
then-print
永远不会执行(即没有输出),而两者:
find . -execdir true '{}' \; -print
find . -execdir false '{}' + -print
打印每条路径。
但是,当使用+
退出代码时find
是set:如果命令的任何调用非零退出,则它为非零,而对于 a 来说,;
退出代码不受命令结果(直接)影响。这种行为POSIX 要求对于-exec
,我想指出否则无法检测到的故障:
如果主表达式由 a 标点
<plus-sign>
,则主表达式应始终评估为 true,并且评估主表达式的路径名应聚合到集合中。 [...]如果任何调用返回非零值作为退出状态,则 find 实用程序应返回非零退出状态。
-exec ... \;
未指定为影响退出代码,因此find
除非出现错误,否则默认行为为退出零。-exec ... \;
非零退出的命令不被视为错误,因此在没有其他错误的情况下,退出代码将始终为零。