El siguiente fragmento antepone una marca de tiempo con cadenas ligeramente diferentes para stdout y stderr. Sin embargo, eso no es exactamente lo que quiero. ¿Cómo tendría que modificarse para agregar marcas de tiempo solo al archivo de registro, manteniendo la salida en la pantalla como está?

LOGFILE=/var/log/a.log
exec 1> >(stdbuf -e0 -o0 ts '[%F %T] O:' | tee -a "$LOGFILE") \
     2> >(stdbuf -e0 -o0 ts '[%F %T] E:' | tee -a "$LOGFILE" >&2)
0
Dirk Eschler 22 oct. 2020 a las 11:23

1 respuesta

La mejor respuesta

Utilice una sustitución de proceso para el argumento tee, en lugar de un archivo directamente. Ejemplo:

#!/bin/bash
cat file | tee >(ts >> log.txt)
> bash test.sh
test1
test2
> cat log.txt
Oct 22 19:34:33 test1
Oct 22 19:34:33 test2

En su ejemplo, redirige las salidas a ts primero, y luego a tee, por lo que también obtendrá marcas de tiempo en su consola.

1
thanasisp 22 oct. 2020 a las 16:38