我当前的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文件,并希望跳过它们。 任何形式的帮助将不胜感激!
答案 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