redirecionamento de cat

11

Digamos que um arquivo chamado abc exista no diretório atual e tenha algum texto nele. Quando você executa o comando:

cat abc > abc

Por que o conteúdo do arquivo abc desaparece?
Por que o comando exclui o texto e o arquivo se torna um arquivo vazio?

    
por Tulsi Kanodia 29.08.2016 / 17:06

2 respostas

27

Por causa do pedido, como as coisas são feitas.

Quando você faz:

cat abc > abc

> é o operador de redirecionamento de saída, quando o shell vê isso, ele abre o arquivo no modo de truncamento usando O_TRUNC flag com open(2) , ou seja, open("abc", O_TRUNC) , portanto o que estava lá no arquivo desaparecerá. Observe que esse redirecionamento é feito primeiro pelo shell antes da execução do comando cat .

Assim, quando o comando cat abc for executado, o arquivo abc já estará truncado, portanto, cat encontrará o arquivo vazio.

    
por 29.08.2016 / 17:09
5

Adicionando @ heemayl's answer , se você quiser que o código seja mais claro sobre a sequência em que as coisas estão acontecendo, você pode simplesmente colocar os redirecionamentos no início do comando:

> abc cat abc
    
por 29.08.2016 / 20:31