Celá smyčka while za rourou beží v subshellu, který má vstup přesměrovaný na výstup grepu, takže každý další read ve smyčce bude číst odtud další řádek. Pokud budeš chtít číst z klávesnice, musíš ten vstup zase přesměrovat na terminál, například takto:
read </dev/tty