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

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

Например:

cat < first > temp

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

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

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

cat < first > first 
11
задан 13 April 2015 в 23:40

3 ответа

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

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

0
ответ дан 13 April 2015 в 23:40

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

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

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

0
ответ дан 13 April 2015 в 23:40

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

0
ответ дан 13 April 2015 в 23:40

Другие вопросы по тегам:

Похожие вопросы: