У меня есть bash oneliner, где я направляю одно изображение через одну и ту же операцию ImageMagick несколько раз.Вместо этого я хотел бы сделать это в виде цикла Bash, желательно без использования временных файлов.
Онелинер: cat in.jpg | convert -quality 1 - jpg:- | convert -quality 1 - jpg:- | convert -quality 1 - jpg:- > out.jpg
Этот также работает: (convert -quality 1 - jpg:- | convert -quality 1 - jpg:- | convert -quality 1 - jpg:-) > out.jpg < in.jpg
В команде convert
-
означает «чтение из стандартного ввода», а jpg:-
означает «вывод в формате JPEG в стандартный вывод».
Я пытался выполнить cat in.jpg | for x in {1..3}; do convert -quality 1 - jpg:-; done > out.jpg
и (for x in {1..3}; do convert -quality 1 - jpg:-; done) < in.jpg > out.jpg
,но оба выдают одну и ту же ошибку.
Я ожидаю получить выходной файл со всеми 3 операциями, примененными к нему, но вместо этого я получаю выходной файл только с одной примененной к нему операцией и следующими ошибками, которые я принимаюозначает, что первая итерация прочитает файл in.jpg, но следующие итерации не получат ничего в stdin:
convert: no decode delegate for this image format `' @ > error/constitute.c/ReadImage/501.
convert: no images defined `jpg:-' @ error/convert.c/ConvertImageCommand/3210.
convert: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
convert: no images defined `jpg:-' @ error/convert.c/ConvertImageCommand/3210.
(я подтвердил, что только первая итерация касается выводафайл, запустив (for x in 90 30 1; do convert -quality $x - jpg:-; done) < in.jpg > out.jpg