Por que “arquivo de arquivo de classificação” removeria todo o conteúdo desse arquivo?

0

Hoje estou aprendendo o comando sort.

Acho que posso usar

sort file1 > file2

Para injetar o arquivo classificado no arquivo2

Mas quando eu uso

sort file1 > file1

file1 fica vazio!

Por quê?!

Eu sei que posso usar -o flag para obter o arquivo de classificação1 no arquivo1.

Mas por que o segundo comando produz um arquivo vazio?

    
por Zen 16.06.2014 / 11:07

2 respostas

7

O redirecionamento de saída pelo shell limpa o conteúdo do arquivo antes que o comando sort seja executado.

De man bash :

Before a command is executed, its input and output may be redirected using a special notation interpreted by the shell. [...]

Redirection of output causes the file whose name results from the expansion of word to be opened for writing [...]. If the file does not exist it is created; if it does exist it is truncated to zero size.

    
por 16.06.2014 / 11:08
0

Como Daniel Beck explicou por que isso falha.

Aqui está uma maneira de fazer o trabalho que o OP deseja.

sort file1 | tee file1

tee é um pipe em forma de T que pode gravar o buffer no arquivo e passar o buffer como saída para o próximo pipe, aqui só precisamos usar sua metade de energia.

    
por 24.06.2014 / 05:06