Я понял:
Изображение использовало цветовой профиль Adobe RGB, который, по-видимому, не обрабатывается должным образом. Я преобразовал в sRGB, и нет никаких проблем.
syntax error near unexpected token 'done'
— это ошибка, которую выдает Bash, когда видит зарезервированное слово done
без соответствующего do
перед ним. Это не имеет ничего общего с кавычками, но, скорее всего, во многом связано с тем, что ваш файл имеет окончания строк CRLF в стиле DOS/Windows -. Возврат каретки (CR,\r
)воспринимается оболочкой как обычный символ, поэтому она видит не зарезервированное слово do
, а do\r
. С другой стороны, в последней строке он распознает done
, поскольку он отделен от конца строки, а CR там с этим пробелом.
Запустите сам файл сценария через dos2unix
. Не добавляйте команду dos2unix
в файл сценария.
Я бы использовал
#!/bin/sh
program_input="$1"
input="$2"
cat "$input" | while read line
do
result=$(echo "$line" | program -sli "$program_input")
if [ "$result" = "" ]
then
printf "$line\t=>\t *none* 0\n"
else
printf "$line\t=>\tyes\n"
fi
done
result=$(... )
предпочтительнее результата =...
(обратная цитата)команда
echo -e `"$line"\t=>\tyes`
означает:
"$line"\t=>\tyes
"$line" =
наyes
echo -e whatever result
(должен быть пустым, либо stdout пойман в yes, либо stderr uncaught ). Ты этого хочешь?
пуристы могут возразить по поводу бесполезного использования кота в качестве
cat "$input" | while read file
do
done
можно заменить на
while read file
do
done < "$input"
однако, если в цикле while слишком много строк, может быть непросто угадать, что читает while.