在 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