Имена файлов, прочитанные из файла, не получают правильного значения

У меня есть сценарий, который следует.

Файлы для обработки хранятся в файле images.txt , который читается строка за строкой. Первая команда echo отображает имя файла правильно, но последующие команды ImageMagick не могут обработать изображение, сообщая, что файл не найден. Почему?

#!/bin/bash
filename="images.txt"
while read -r line
do
echo "line is $line"
# width
width="$( identify -format "%w" "$line" )" 
# height
height="$( identify -format "%h" "$line" )"
echo "$width X $height "
exit 1
if [ $width -lt 250 -a $height -lt 250 -a $width -lt $height ]
then
    echo "1"        
    convert $line -resize 250 $line

elif [ $width -lt 250 -a $height -lt 250 -a $width -gt $height ]
then
    echo "2"        
    convert $line -resize x250 $line
elif [ $width -lt 250 ]
then
    echo "3" 
    convert $line -resize 250 $line
elif [ $height -lt 250 ]
then
    echo "4"
    convert $line -resize x250 $line
else
    echo "All is Well" 
fi
done < "$filename"

Вывод:

line is v/347/l_ib-dfran035__62594_zoom.jpg
': No such file or directory @ error/blob.c/OpenBlob/2589._zoom.jpg
-1
09.12.2016, 13:45
1 ответ

Судя по строке с ошибкой ( ': Нет такого файла ... вместо ' filename ': Нет такого файла ... ), проблема, вероятно, заключается в вашем images.txt , строки которого завершаются CR-LF (то есть images.txt происходит из мира Windows).

Из-за этого ваша строка переменная (имя файла) заканчивается неправильным CR (возврат каретки) (такого файла нет ...). Более того, когда он отображается на экране, из-за встроенного управляющего символа CR печать продолжается с начала строки и перезаписывает имя файла.

Измените формат images.txt так, чтобы его строки заканчивались LF (например, используйте утилиту dos2unix ), или отфильтруйте завершающий CR в bash.

[обновление] Если вы решите отфильтровать CR в bash, в идеале вы можете сделать следующее:

  • read -r -d $ '\ r' line
  • или сразу после read -r line : line = $ {line% $ '\ r'}
1
28.01.2020, 05:10

Теги

Похожие вопросы