Hace un tiempo hice un script y agregué algunos registros a su alrededor, pero olvidé cómo funciona la redirección para el registro :-(
La esencia de esto es:
#!/bin/bash
LOGFILE=/some/path/mylogfile
(
# here go my commands which produce some stdout
# and, if something goes wrong, also some stderr
) 1>>${LOGFILE} 2> >( tee -a ${LOGFILE} >&2 )
Cuando ejecuto el script, no imprime nada stdout
, sino que solo imprime lo que corresponde stderr
. El archivo de registro ${LOGFILE}
captura stdout y stderr.
Cuando ejecuto el script y no hay salida en mi terminal, entonces sé que todo está bien. Si hay algún resultado, sé que algo salió mal y puedo verificar el archivo de registro para averiguar cuál es el problema.
La parte de la redirección que ahora me desconcierta es la sintaxis de: 2> >( some command )
¿Alguien puede explicar lo que está pasando allí?
echo <(date)
, me da el nombre del archivo sustituido:/dev/fd/63
. Si ejecutocat <(date)
, me da la fecha, es decir, el contenido del archivo sustituido:Fri Nov 18 14:11:09 NZDT 2016
./dev
es un nombre para la tubería entre los procesos.tee
, en este caso)?tee
stderr y mantenerlo separado de stdout.