Shell脚本帮助,如何跳过错误报告文件?

时间:2013-04-25 02:21:46

标签: shell tesseract

我当前的shell脚本是这样的:

for i in *.pdf
do
    convert -density 400 $i -depth 8 ${i/pdf/jpg}
done

for j in *.jpg
do
    tesseract -l eng $j ${j/.jpg}
    rm $j
    mv ${j}.txt textfile
done

所以粗略地说,对于每个pdf文件,它将其转换为jpg文件,对于每个jpg文件,我使用tesseract将其转换为原始文本文件。从pdf到jpg的转换不会出现错误,但tesseract可能会报告错误,例如:“由于已加入而取消了长度0的重复”。我的脚本从那里停止了...... 有没有办法让我的脚本一旦看到某种错误报告就跳过它?所以我不需要转录损坏的jpg文件,并希望跳过它们。 任何形式的帮助将不胜感激!

3 个答案:

答案 0 :(得分:0)

您可以检查$?(上一个命令的返回码)并在脚本非零(例如,失败)时退出脚本。

[ $? != 0 ] && echo "Failed and died"
# More traditionally
if [ $? != 0 ] ; then
  return_val=$?
  echo "Failed with ${return_val} code"
  exit $return_val
fi

您还可以将输出流(stdout,stderr)合并到stdout并获取值

r=$(tessaract -l eng $j ... &>/dev/stdout)

$r将包含stderror结果。

或者,您可以将输出发送到您通过exec

创建的另一个文件描述符

答案 1 :(得分:0)

tesseract将错误返回到命令行。

for j in *.jpg
do
    tesseract -l eng $j ${j/.jpg}
    [ $? -ne 0 ]  && break
    rm $j
    mv ${j}.txt textfile
done

答案 2 :(得分:0)

如果您的脚本在tesseract失败时中止,那么您可能在脚本顶部附近有set -e。如果您希望脚本在tesseract失败时中止,请添加set -e或检查tesseract成功与否:

if ! tesseract -l eng $j ${j/.jpg}; then exit 1; fi

 tesseract -l eng $j ${j/.jpg} || exit 1