Почему получение stdin из файла отличается от получения его по трубе?

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

$ (head -1; grep mike) < tmp.csv
name,age,favourite colour
mike,38,blue

Но получение входных данных от cat или любой другой команды не работает - похоже, grep никогда не получает остаток файла.

$ cat tmp.csv | (head -1; grep mike)
name,age,favourite colour

Почему в этих двух случаях поведение разное?

8
задан Nicolas Kaiser 27 January 2012 в 15:12
поделиться