Почему перенаправление на тот же файл усекает файл?


11

Обычно мы используем другой файл для перенаправления вывода.

Например :

cat < first > temp

В этой команде содержимое first перенаправляется в temp вместо стандартного вывода.

Тогда почему он усекает файл, если я использую то же имя файла?

Почему он не может перезаписать один и тот же файл?

cat < first > first 

Ответы:


19

Когда вы используете перенаправление ввода / вывода таким образом, оба файла «input» и «output» открываются оболочкой перед выполнением команды. А открытие файла для перезаписи - это то же самое, что обрезать его перед записью. Результат: catвидит пустой файл на входе ...


0

Потому что обработка в общем случае будет очень сложной. Просто рассмотрите следующий пример:

Программа читает файл построчно и выводит каждую строку дважды. Теперь, чтобы это работало без второго файла (т. Е. В том же файле), программе потребуется буферизовать большую часть (всех) строк, которые она будет читать, поскольку в противном случае они будут перезаписаны, прежде чем их можно будет прочитать.

Для простоты программы обычно используют вторичный, временный файл, который они перемещают поверх оригинала после завершения. Это, например, как sed -i(встроенный) работает.


0

Как правило, синтаксис для перенаправления в этом случае должен быть cat first > temp. Это означает, что catвыходные данные firstотправляются в файл temp. В случае вашего утверждения cat < first > tempвывод catне был завершен в тот момент, когда он был перенаправлен снова. Ничто в результате не приводит ни к чему.

Однако, catесли файл и выходные данные перенаправлены в другой файл, ничем не отличается от основного cp.


cat < first > tempработает просто отлично.
Janc
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.