Разница между чтением из канала и чтением из файла заключается в том, что вы можете lseek
для файла, но не для канала.
Поведение здесь выглядит (как видно из strace
), как будто оно исходит от head
, а не от bash.head
прочтет буфер и найдет соответствующее количество строк, затем lseek
в обратном направлении до точки, где заканчивается последняя строка вывода, оставляя дескриптор файла открытым в этом месте.Как и выше, это работает, если он читает файл, но не если он читает из канала.
Я не могу вспомнить ни одного случая другого , чем то, что вы делаете, где это поведениев head
имеет смысл, но это так.Узнай что-то новое каждый день, говорю тебе ...