Когда оболочка видит перенаправление, сначала открывает соответствующие файлы, прежде чем выполнять какую-либо из задействованных команд. Таким образом, когда вы делаете:
foo file.txt | bar > file.txt
Перенаправление на file.txt заставляет его усекаться до запуска foo и может читать file.txt. На стороне примечания, поэтому вы не можете этого сделать:
sed 'blah' file.txt > file.txt
И почему sed имеет возможность редактирования на месте.
Наконец, выполните:
.. | cat > file.txt
- бесполезное использование cat, особенно, если вы пытаетесь читать из file.txt ранее.
Если вы хотите изменить файл на месте, a бесполезное использование cat . Возможно, вы сможете использовать трюки sed или awk с редактированием на месте.