Оболочка будет анализировать команду и обрабатывать перенаправления в первую очередь. Когда он видит «> afile», он усекает «afile» и открывает его для записи. Ваши данные теперь уничтожены. Затем оболочка передает имя файла на cut
, которому теперь нечего читать.
Вот как я узнал:
some | pipeline < my_file > my_file.tmp
ln my_file my_file.bak # this is a hard link
mv my_file.tmp my_file
Это позволяет сохранять исходные данные как можно дольше.
Если у вас проблемы с дисковым пространством, вам придется полностью прочитать входной файл в память.