systemadmin.es > Script > Redirección de entrada y salida con el mismo fichero

Redirección de entrada y salida con el mismo fichero

Si necesitamos modificar pasar un fichero por un conjunto de programas diferentes mediante pipes y escribir el resultado en el mismo fichero, nos daremos cuenta que siempre se queda en blanco.

Cogemos este fichero con ejemplo:

# echo -e "linea1\nlinea2" > bob
# cat bob 
linea1
linea2

Por ejemplo, si queremos invertir el contenido de un fichero mediante tac:

# tac bob 
linea2
linea1

Al intentar guardar la salida en el fichero origen veremos que se queda en blanco:

# tac bob > bob 
# cat bob 
# 

Esto se debe a que el operador de shell > abre el fichero para escribir antes que el programa de la pipeline empieze a leerlo, por lo que el resultado siempre es un fichero en blanco. Para solucionarlo podemos usar la herramienta sponge.

Esta herramienta guarda todo el contenido a escribir hasta que recibe el EOF y luego escribe el contenido. Por lo tanto, permite que el programa lea el contenido y luego se escriba en el mismo fichero sin perder datos ni que se quede en blanco el fichero:

# tac bob | sponge bob 
# cat bob 
linea2
linea1

One comment to “Redirección de entrada y salida con el mismo fichero”

  1. sponge bob xDDDD 😉

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>