gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:41:10 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com