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 trunca o arquivo se eu usar o mesmo nome de arquivo?

Por que não pode sobrescrever o mesmo arquivo?

cat < first > first 
    
por Searock 20.10.2010 / 07:01

3 respostas

19

Quando você usa o redirecionamento de E / S, tanto o "input" & amp; Os arquivos "output" são abertos pelo shell antes de o comando ser executado. E abrir um arquivo para sobrescrever é o mesmo que truncá-lo antes de escrever. O resultado: cat vê um arquivo vazio na entrada ...

    
por JanC 20.10.2010 / 07:20
0

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

Um programa lê um arquivo linha por linha e produz cada linha duas vezes. Agora, para que isso funcione sem um segundo arquivo (ou seja, no mesmo arquivo), o programa precisaria armazenar em buffer a maioria (todas) das linhas que ele ler, já que elas serão sobrescritas antes de serem lidas.

Para manter os assuntos, os programas simples geralmente usam um arquivo secundário e temporário, que eles movem sobre o original assim que terminam. É por exemplo como funciona sed -i (inline).

    
por Grey Panther 20.10.2010 / 07:10
0

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

No entanto, cat ing um arquivo e a saída redirecionada para outro arquivo não é diferente de um cp básico.

    
por Casey Keller 20.10.2010 / 07:21