我正在编写一个快速脚本来列出目录中的所有文件,对每个文件运行一个函数,然后打印出状态代码。现在我想要的状态代码是整个交易的状态代码,而不是执行的最后一个表达式。例如……
find ./ -maxdepth 1 -name \*.txt -exec my_function {} \;
假设我的目录中有以下文件 file1.txt
、file2.txt
、file3.txt
。当 file1.txt
被传递给 -exec
时,它的状态代码是 1
但调用 file2.txt
和 file3.txt
返回 0
。当我在最后调用 echo $?
时,尽管对 file1.txt
的调用返回了 ,但它从最后执行的表达式返回
。我想要的是一个非零状态代码,如果任何表达式在上面的脚本中返回一个非零值,就像对 0
1file1.txt
所描述的那样。我该怎么做?
最佳答案
我会建议这样的事情:
status=0
while IFS= read -d '' -r file; do
my_function "$file"
((status |= $?))
done < <(find . -maxdepth 1 -name '*.txt' -print0)
echo "status=$status"
如果 my_function
中的任何存在状态为 1
,这将打印 status=1
。
关于linux - 在 find 中将每个参数传递给 -exec 后的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31012223/