我已经忽略了 find 的手册页,-quit
似乎部分地做了我想做的,除了它只会导致 find
在以下情况下返回非零值发生错误。那么 find
是如何被强制返回非零值或至少被欺骗返回非零值以维护者可读的方式呢?到目前为止,我有这个例子:
$ find . -maxdepth 2 -type f \( -exec echo {} \; -o \( -printf "FAIL\n" -a -quit \) \)
./scooby
./shaggy
./velma
./daphne
./fred
$ echo $?
0
但是如果我用对 false 的调用替换 echo,我会得到所需的提前退出,但没有非零退出代码:
$ find . -maxdepth 2 -type f \( -exec false {} \; -o \( -printf "FAIL\n" -a -quit \) \)
FAIL
$ echo $?
0
更新:
我试图让 find 在 -exec
返回 false 时返回非零值,即执行的命令返回非零值。目前,find
只是将非零的 -exec
调用转换为 bool 状态,以用作 find
表达式的一部分。
$ find . -maxdepth 2 -type f \( -exec chmod a+x {} \; -o \( -printf "FAIL\n" -a -quit \) \)
如果 chmod 失败,这目前永远不会返回非零值。我希望能够在 chmod 失败时返回非零值,并提前退出,它已经使用 -quit
完成了。
最佳答案
如果你总是想返回一个非零的退出代码,使用&& false
如下所示:
find . -maxdepth 2 -type f ... && false
使用grep
查找由find
打印的特殊FAIL
字符串。如果 exec
失败,它将返回零,否则返回非零。
$ find . -maxdepth 2 -type f \( -exec chmod a+x {} \; -o \( -printf "FAIL\n" -a -quit \) \) | grep -q "FAIL"
关于linux - 查找:如何强制非零退出状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21253546/