从“find .. -exec ..”命令获取返回值?

从“find .. -exec ..”命令获取返回值?

在 bash 脚本中,我有一个函数对传递给它的参数进行一些处理。我想根据处理的进行情况设置一个返回值。问题是该函数是从调用的find ... -exec bash -c func,因此失去了以这种方式更新全局变量的机会,例如error_code.

#!/bin/bash
check_file() {
    filename=$1
    echo -n "$filename ... "
    if [ ... ]; then
        echo "NOK"
# return/update error_code?
    else
        echo "OK"
    fi
}

export -f check_file
# look for exec binary only
find . -type f -executable -exec bash -c "file -i {} | grep -q 'application/x-executable; charset=binary'" \; -exec bash -c 'check_file "$0"' {} \;
# exit $error_code??

如果error_code函数可以更新全局变量,则仅当处理为“NOK”时才会更新它,因为find会多次调用该函数check_file

我如何使用现有脚本来做到这一点,或者可能需要不同的方法?

答案1

我让脚本做我想做的事,这不是最优雅的解决方案,但它完成了工作。

主 shell 创建一个临时文件,将其名称导出到后续的子 shell,子 shell 可以对其进行写入。主 shell 最后读取返回代码,删除临时文件并返回错误代码值。

#!/bin/bash
export tmpf=`mktemp`
rcode=0
echo $rcode > $tmpf
...

check_file() {
...
echo 1 > $tmpf
...
}
...
rcode=`cat $tmpf`
rm -f $tmpf
echo "done."
exit $rcode

相关内容