Немного поздно, но может быть (лучшее) решение:
while true ; do
read -r -s -t 0.5; RETVAL=$?
# ok? echo && continue
[ $RETVAL -eq 0 ] && echo -E "$REPLY" && continue
# no timeout ? (EOF or error) break
[ $RETVAL -gt 128 ] || break
done
ИМХО, больший тайм-аут никому не повредит, так как "чтение" возвращается, как только становится доступной новая строка ...
{{1 }}