linux - 查找:如何强制非零退出状态

标签 linux find

我已经忽略了 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/

相关文章:

python 在字符串中找到最后一个

Python 错误 : TypeError: a bytes-like object is required, 不是 'str'

linux - Bash 脚本运行带参数的程序不起作用

c++ - 无法使用 Code::Blocks 在 linux mint 中编译 C++

linux - 哪个是 Mono/C# 库 DLL 的环境变量?

vim - 如何使用 vim 有条件地替换数字

java - 如何找到 Tomcat6 使用的 Java 版本?

linux - 在每个目录中查找子目录和进程文件的名称

java - 如何在linux中终止java代码

linux - 比较一个变量和多个常量