Как использовать `while read` (Bash) для чтения последней строки в файле, если в конце файла нет символа новой строки?

Допустим, у меня есть следующий скрипт Bash:

while read SCRIPT_SOURCE_LINE; do
  echo "$SCRIPT_SOURCE_LINE"
done

Я заметил, что для файлов без новой строки в конце это будет эффективно пропускать последнюю строку.

Я искал решениеи нашел это:

Когда чтение достигает конца файла вместо конца строки, он читает данные и присваивает их переменным, но завершается с ненулевым статусом. Если ваш цикл построен "во время чтения; делать вещи; сделано

Таким образом, вместо непосредственного тестирования состояния завершения чтения, проверьте флаг и задайте для команды чтения этот флаг из тела цикла. Таким образом, независимо от состояния выхода чтения, выполняется все тело цикла, потому что чтение было просто одной из списка команд в цикле, как и любой другой, а не решающим фактором того, будет ли цикл выполняться вообще.

DONE=false
until $DONE ;do
read || DONE=true
# process $REPLY here
done < /path/to/file.in

Как я могу переписать это решение, чтобы оно действовало точно так же, какwhile цикл у меня был раньше, т.е. без жесткого кодирования местоположения входного файла?

Ответы на вопрос(7)

Ваш ответ на вопрос