Несколько экспериментов для собственного удовольствия (и для всех, кто интересуется этим вопросом).
Я сгенерировал afile
размером 100 МБ, используя /dev /urandom, и попробовал несколько конвейеров и перенаправлений, используя один и тот же файл.
Большинство следующих команд не имеют логического смысла (поскольку "успешный" результат должен сохранить файл без изменений), и следует также отметить, что если для ввода и вывода указаны разные файлы, все команды приводят к полной копии ввода.
Вот несколько результатов:
$ cat <afile >afile
Определение: cat stdin из afile и перенаправить в afile.
Результат: файл обрезан (0 байт)
$ cat afile|cat >afile
Определение: кошачий файл и труба на другую кошку, перенаправленную на файл.
Результат: файл обрезан (0 байт)
$ tee afile <afile >/dev/null
Определение: tee stdin из afile и запись в afile (и перенаправление stdout в /dev /null).
Результат: файл обрезан (0 байт)
$ cat afile|tee afile >/dev/null
Определение: cat afile и pipe stdout to tee (и перенаправить stdout tee в /dev /null).
Результат: файл уменьшен до 128 КБ
Последняя запись наиболее ясно показывает проблему: cat может только буферизовать 128 КБ и направить ее в тэ до того, как файл исчезнет. Так что, если ваш файл небольшой, вам может повезти, но лучше прислушаться к ответу и всегда разделять входные и выходные файлы.