Я создал сценарий оболочки, который использует 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 ответ1

2

Я предполагаю, что там где-то есть метасимвол оболочки, который отключает его.

Для диагностики и решения:

  1. Определите точно, где это останавливается
  2. Посмотрите на десять строк вокруг него
  3. Ищите любой > < ! $ которые не избежали

Альтернативно, добавьте -x в первую строку скрипта, чтобы вы могли видеть каждую команду во время ее выполнения. Это должно выглядеть примерно так:

#! /bin/bash -x

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .