Si quiero hacer el contenido de file2
coincide con el contenido de file1
, obviamente podría simplemente ejecutar cp file1 file2
.
Sin embargo, si quiero conservar todo sobre file2
excepto el contenido:propietario, permisos, atributos extendidos, ACL, enlaces duros, etc., etc., entonces no me gustaría ejecutar cp
.* En ese caso, solo quiero dejar caer el contenido de file1
en file2
.
Parece que lo siguiente lo haría:
< file1 > file2
Pero no funciona. file2
se trunca a nada y no se escribe. Sin embargo,
cat < file1 > file2
lo hace trabajo.
Me sorprendió que la primera versión no funciona.
¿Es la segunda versión un UUOC? ¿Hay alguna manera de hacer esto sin invocar un comando, simplemente usando redirecciones?
Nota:Soy consciente de que UUOC es más un punto pedante que un verdadero anti-patrón.
*Como descubrió tniles09, cp
voluntad de hecho funciona en este caso.
Respuesta aceptada:
cat < file1 > file2
no es un UUOC. Clásicamente, <
y >
hacer redirecciones que corresponden a duplicaciones de descriptores de archivos a nivel del sistema.
Las duplicaciones de descriptores de archivos por sí mismas no hacen nada (bueno, >
las redirecciones se abren con O_TRUNC
, por lo que, para ser precisos, las redirecciones de salida truncan el archivo de salida). No dejes que el <
>
los símbolos te confunden. Las redirecciones no mueven datos:asignan descriptores de archivo a otros descriptores de archivo.
En este caso, abre file1
y asigne ese descriptor de archivo al descriptor de archivo (
<file1
==0<file1
) y file2
y asigne ese descriptor de archivo al descriptor de archivo 1
(>file2
==1>file2
).
Ahora que tiene dos descriptores de archivo, necesita un proceso para palear datos entre los dos, y eso es lo que cat
es para.