脚本返回退出代码摘要

脚本返回退出代码摘要

我使用这个命令来测试我的 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 或打印文件名)

相关内容