¿Por qué la redirección de bash a un archivo ocurre en modo agregar?

Respuestas:

19

Lo que falta es que solo está abriendo (y truncando) el archivo funa vez, en la execllamada. Los dos echocomandos simplemente escriben en un descriptor de archivo ya abierto. Por flo tanto, el archivo no se truncará con ninguna echollamada.

Para redirigir la salida estándar a un descriptor de archivo, la sintaxis es >&ndonde nhay algún pequeño entero positivo que denota el descriptor de archivo (no hay >>&nredirección). El descriptor de archivo ya debe estar asociado con un archivo abierto para que esto funcione. Es el acto de abrir el archivo y asociarlo con un descriptor exec 3>fque trunca el archivo ( exec 3>>fno habría truncado el archivo y lo habría abierto en modo append). Simplemente escribir con >&3no abre el archivo ni lo trunca.

Hubiera sido diferente si lo hubieras hecho

echo foo >f
echo bar >f
cat f

(cada uno echose abre y trunca f), o, más complicado,

exec 3>f; echo foo >&3
exec 3>f; echo bar >&3
exec 3>&- # close fd 3
cat f

(el archivo se abre y se trunca execantes de cada uno echo).

Kusalananda
fuente