带有 ImageMagick 的 Shell 脚本:永远挂起吗?

带有 ImageMagick 的 Shell 脚本:永远挂起吗?

我生成了一个 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 元字符导致它出错。

诊断并解决:

  1. 确定它停止的确切位置
  2. 看看周围的十条线
  3. 查找> < ! $未转义的

或者,-x在脚本的第一行添加,以便您可以看到每个命令的运行情况。它应该看起来像这样:

#! /bin/bash -x

相关内容