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?
files
io-redirection
cat
Tulsi Kanodia
fonte
fonte
cut
alterar um arquivo?cat abc | dog abc
tee
.Respostas:
Por causa da ordem de como as coisas são feitas.
Quando você faz:
>
é o operador de redirecionamento de saída, quando o shell vê isso, ele abre o arquivo no modo de truncamento usandoO_TRUNC
flag comopen(2)
ieopen("abc", O_TRUNC)
, portanto, o que quer que estivesse no arquivo desapareceu. Observe que esse redirecionamento é feito primeiro pelo shell antes dacat
execução do comando.Portanto, quando o comando é
cat abc
executado, o arquivoabc
já está truncado e, portanto , o arquivo ficacat
vazio.fonte
cat: filename: input file is output file
(ondefilename
está o nome do arquivo que você escolheu) é impresso no stdout antigo.Adicionando à resposta de @ heemayl , se você quiser que o código seja mais claro sobre a sequência em que as coisas estão acontecendo, basta colocar os redirecionamentos no início do comando:
fonte