Há um tempo atrás, criei um script e adicionei alguns logs em torno dele, mas esqueci como o redirecionamento para o log funciona :-(
A essência disso é:
#!/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 )
Quando executo o script, ele não imprime nada stdout
, mas apenas imprime o que é necessário stderr
. O arquivo de log ${LOGFILE}
captura o stdout e o stderr.
Quando executo o script e não há saída no meu terminal, sei que está tudo bem. Se houver alguma saída, sei que algo deu errado e posso verificar o arquivo de log para descobrir qual é o problema.
A parte do redirecionamento que agora me intriga é a sintaxe de: 2> >( some command )
Alguém pode explicar o que está acontecendo lá?
echo <(date)
, dá-me o nome do arquivo substituído:/dev/fd/63
. Se eu executarcat <(date)
, dá-me a data, ou seja, o conteúdo do arquivo substituído:Fri Nov 18 14:11:09 NZDT 2016
./dev
é um nome para o canal entre os processos.tee
, neste caso)?tee
stderr e mantê-lo separado do stdout.