Digamos que un archivo llamado abc
existe en el directorio actual y tiene texto. Cuando ejecutas el comando:
cat abc > abc
¿Por qué abc
desaparece el contenido del archivo ?
¿Por qué el comando elimina el texto que contiene y el archivo se convierte en un archivo vacío?
files
io-redirection
cat
Tulsi Kanodia
fuente
fuente
cut
cambiar un archivo en su lugar?cat abc | dog abc
tee
.Respuestas:
Por el orden en que se hacen las cosas.
Cuando tu lo hagas:
>
es el operador de redireccionamiento de salida, cuando el shell ve esto, abre el archivo en modo de truncamiento usando laO_TRUNC
marca conopen(2)
ieopen("abc", O_TRUNC)
, por lo que todo lo que había en el archivo desaparecerá. Tenga en cuenta que esta redirección se realiza primero por el shell antes de que secat
ejecute el comando.Entonces, cuando se
cat abc
ejecuta el comando , el archivoabc
ya está truncado, porcat
lo tanto , encontrará el archivo vacío.fuente
cat: filename: input file is output file
(dondefilename
está el nombre de archivo que eligió) se imprime en el stdout antiguo.Agregando a la respuesta de @ heemayl , si desea que el código sea más claro acerca de la secuencia en la que están sucediendo las cosas, simplemente puede colocar las redirecciones al comienzo del comando:
fuente