Одной из возможных причин не читать последнюю строку является то, что файл не заканчивается новой строкой.В целом, я ожидал бы, что это сработает, но это может быть причиной.
На MacOS X (10.7.1) я получил такой вывод, который вы наблюдаете:
$ /bin/echo -n Hi
Hi$ /bin/echo -n Hi > x
$ while read line; do echo $line; done < x
$
Очевидное исправление заключается в том, чтобы файл заканчивался символом новой строки.