Quiero ver la salida de un comando en el terminal como si no hubiera redirección. Además, stderr debe redirigirse a err.log y stdout debe redirigirse a stdout.log.
Sería bueno tener también la copia exacta de lo que se muestra en la terminal, es decir, errores impresos como y cuando ocurre, en un archivo separado: stdouterr.log.
bash
logs
io-redirection
balki
fuente
fuente

Respuestas:
Use el
teecomando de la siguiente manera:3>&1 1>&2 2>&3es cómo intercambiar stderr y stdout, porque tee solo puede aceptar stdout.Eche un vistazo al comando tee de Unix para obtener redirecciones más avanzadas
tee.fuente
cmdcon(cmd ; echo >exit_code.txt $?).((cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log)Creo que registrar stdout y stderr en dos archivos diferentes es una idea espléndida. ¿No hace que los registros sean asíncronos? Así que probé lo siguiente:
((cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log) &> all.logen otra terminal
fuente
&| tee all.logal final del comando en lugar de&> all.log&|. También entiendo&>,|&pero ¿qué&|significa en este contexto? No pude encontrar una referencia de sintaxis adecuada, ni en la red, ni siquiera consultando la página del manual de bash "bash (1)" ... Tx|&@ Dogbane, gracias.
También encontré otra forma que guarda las dos secuencias aproximadamente en el orden, ya que se imprimirían sin redireccionamiento.
command 2> >(tee errlog | tee -a bothLog > /dev/tty ) | tee outlog | tee -a bothLogPero esto solo funciona con los shells que admiten la sustitución de procesos.
fuente
prueba esto :
fuente