Consulta sobre Scripting (stdin, stdout, stderr)

Buenas tardes,

Llevo buscando varios días información sobre la shell bash para trabajar con los flujos de información, lo que se muestra por pantalla, errores, guardarlo en archivo, etc.

Al final lo he conseguido hacer de forma cutre, pero me surge la duda de si se podría hacer lo siguiente de alguna forma que no se me ha ocurrido o mucho más elegante en 1 sóla línea.

La situación sería:

echo "Esto lo quiero mostrar por pantalla y a la vez que me lo guarde en un archivo" >> archivo.txt


De esta forma me lo envía directamente al archivo y no lo muestra por pantalla. Teniendo en cuenta, que era un programa con menús y bastantes comentarios y aclaraciones, que tenían que ser mostrados por pantalla y a la vez guardados en el log para saber lo que había hecho el usuario, lo que he hecho es duplicar cada línea:

echo "Esto lo quiero mostrar por pantalla y a la vez que me lo guarde en un archivo" >> archivo.txt
echo "Esto lo quiero mostrar por pantalla y a la vez que me lo guarde en un archivo"


Una la redirecciono al archivo para hacer el log y la otra para que lo muestre por pantalla, pero se podría hacer de alguna forma para que lo mostrase a la vez por pantalla y lo enviase al log.

He utilizado pipes, cat, cat << EOF y diferentes formas, pero ninguna lo hacía como quería, sólo duplicando cada línea, lo cual no me parece muy práctico.

¿Alguno sabría como hacerlo en una sóla línea?

Muchas gracias.

Un saludo
Con redirecciones no sé si se podría, yo no sé cómo.

Te podrías hacer una funcioncilla, por ejemplo:

LOGF="archivo.txt"
function log {
   echo "$1" >> $LOGF
   echo "$1"
}

Y cambiar los echos por:

log "Esto lo quiero mostrar por pantalla y a la vez que me lo guarde en un archivo"
echo "Esto lo quiero mostrar por pantalla y a la vez que me lo guarde en un archivo" | tee -a archivo.txt
Muchas gracias!!!! por las dos opciones. [360º]

Así que desharé la crutréz que tenía y lo haré más elegante.

Un saludo

Zokko
3 respuestas