Предположим, что у меня есть следующий Bash script:
while read SCRIPT_SOURCE_LINE; do
echo "$SCRIPT_SOURCE_LINE"
done
Я заметил, что для файлов без новой строки в конце это эффективно пропустит последнюю строку.
Я искал для решения и нашел это:
Когда чтение доходит до конца файла конца строки, он читается в данных и присваивать их переменным, но он выходит с ненулевым статусом. Если ваш цикл построен "while читать, делать вещи, делать
Итак, вместо тестирования выхода для чтения статус, проверить флаг и команда чтения устанавливает этот флаг из внутри тела петли. Сюда независимо от того, считывает статус выхода, весь цикл цикла цикла, потому что чтение был только одним из списка команд в цикле, как и любой другой, а не решающим фактором, если цикл будет получить запуск вообще.
DONE=false until $DONE ;do read || DONE=true # process $REPLY here done < /path/to/file.in
Как я могу переписать это решение, чтобы заставить его вести себя точно так же, как цикл while
, который у меня был раньше, т.е. без жесткого кодирования местоположения входного файла?