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

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

Например:

cat < first > temp

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

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

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

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

2 ответа

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

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

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

0
ответ дан 26 May 2018 в 00:55

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

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

0
ответ дан 26 May 2018 в 00:55

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

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