我使用这个命令来测试我的 html 页面是否存在错误:
find . -iname '*html' -type f -print -exec /usr/local/bin/tidy -q -e {} \;
如果 tidy 发现任何错误,我希望获取退出代码 > 0。
发现总是返回 0。
有没有办法对 tidy 的退出代码求和,并从 find 或任何其他包装脚本中返回它?
答案1
尝试这个:
#!/bin/bash
NUM_FAILS=0
for FILE in $(find . -iname '*.html' -type f -print); do
/usr/local/bin/tidy -q -e ${FILE}
if [ $? -ne 0 ]; then
((NUM_FAILS++))
fi
done
if [ ${NUM_FAILS} -gt 0 ]; then
echo -e "There were ${NUM_FAILS} failed files."
exit 1
fi
exit 0
说明:您需要循环遍历find
命令的结果,运行tidy
,然后如果发现错误则增加计数器(我假设tidy
在发生错误时会生成非零的返回代码)。
循环遍历文件后,如果出现任何错误,您可以明确地说明事情是否成功完成,exit 1
这始终是一个好的做法。exit 0
答案2
您可以尝试这样的事情:
find . -iname '*html' -type f \( -exec tidy -q -e {} \; -o -print \)
这只会打印出tidy
以错误代码退出的文件名。您可以使用它-fprint
来收集文件中的文件名:
find . -iname '*html' -type f \( -exec tidy -q -e {} \; -o -fprint files_with_errors \)
这些构造利用了这样一个事实:它-exec
是一个布尔表达式,根据命令的成功返回 true 或 false;-o
标志是一个布尔值OR
,因此如下所示:
查找所有匹配*html
且为文件的条目(对于这些条目,tidy 返回 true 或打印文件名)