我生成了一个 shell 脚本,它使用 ImageMagick 转换和裁剪大约 18000 张图像。下面是一个示例条目(因此共有 18000 张):
if [ ! -f ./cropped/16333-1.png ]
then
convert -crop 724x118+876+1989 ./lin/34.png ./cropped/16333-1.png
echo cropping 16333-1
fi
if [ ! -f ./cropped/16333-1_thumb.png ]
then
convert -define jpeg:size=400x100 ./cropped/16333-1.png -thumbnail '400x100>' -background transparent -gravity center -extent 400x100 ./cropped/16333-1_thumb.png
echo thumbing 16333-1
fi
该脚本仅运行了大约 2000 张图像,然后就永远挂起了。我是不是漏掉了什么,还是某处有内存泄漏?
感谢您的帮助!
更新
我尝试按照建议使用 -x 标志运行该脚本,但该命令执行后脚本挂起了:
+ '[' '!' -f ./cropped/8967-1_thumb.png ']'
+ convert -define jpeg:size=400x100 ./cropped/8967-1.png -thumbnail '400x100>' -background transparent -gravity center -extent 400x100 ./cropped/8967-1_thumb.png
但是,当我中断脚本,然后复制并粘贴上面的命令时,它运行得很好。没有挂起。然后我可以恢复脚本,它又可以正常运行。
神秘...
答案1
我猜测其中某处有一些 shell 元字符导致它出错。
诊断并解决:
- 确定它停止的确切位置
- 看看周围的十条线
- 查找
> < ! $
未转义的
或者,-x
在脚本的第一行添加,以便您可以看到每个命令的运行情况。它应该看起来像这样:
#! /bin/bash -x