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
tee
comando de la siguiente manera:3>&1 1>&2 2>&3
es 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
cmd
con(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.log
en otra terminal
fuente
&| tee all.log
al 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 bothLog
Pero esto solo funciona con los shells que admiten la sustitución de procesos.
fuente
prueba esto :
fuente