Por que o redirecionamento para o mesmo arquivo trunca o arquivo?

11

Normalmente, usamos um arquivo diferente para redirecionar a saída.

Por exemplo :

cat < first > temp

Neste comando, o conteúdo do primeiro é redirecionado para temp em vez da saída padrão.

Então, por que ele trunca o arquivo se eu uso o mesmo nome?

Por que não pode substituir o mesmo arquivo?

cat < first > first 
Searock
fonte

Respostas:

19

Quando você usa o redirecionamento de E / S assim, os arquivos "input" e "output" são abertos pelo shell antes que o comando seja executado. E abrir um arquivo para substituir é o mesmo que truncá-lo antes de gravar. O resultado: catvê um arquivo vazio na entrada ...

JanC
fonte
0

Porque lidar com isso no caso geral seria muito complicado. Considere o seguinte exemplo:

Um programa lê um arquivo linha por linha e gera cada linha duas vezes. Agora, para que isso funcione sem um segundo arquivo (ou seja, no mesmo arquivo), o programa precisará armazenar em buffer a maioria (todas) das linhas que ele lerá, pois elas serão substituídas antes que possam ser lidas.

Para manter a simplicidade, os programas geralmente usam um arquivo secundário e temporário, que é movido sobre o original assim que termina. É assim, por exemplo, como sed -i(em linha) funciona.

Pantera Cinza
fonte
0

Normalmente, a sintaxe para redirecionar neste caso deve ser cat first > temp. Isso significa que cata saída de firsté enviada para o arquivo de temp. No caso de sua declaração cat < first > temp, a saída catnão foi concluída no momento em que é redirecionada para a saída novamente. Nada resulta em nada fora.

No entanto, catum arquivo e a saída redirecionada para outro arquivo não são diferentes de um básico cp.

Casey Keller
fonte
cat < first > tempfunciona muito bem.
JanC 20/10/10