Qualche tempo fa ho creato uno script e ho aggiunto un po 'di registrazione, ma ho dimenticato come funziona il reindirizzamento per la registrazione :-(
L'essenza è:
#!/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 eseguo la sceneggiatura, non stampa nulla stdout
, ma stampa solo ciò che accade stderr
. Logfile ${LOGFILE}
cattura sia stdout che stderr.
Quando eseguo lo script e non c'è output sul mio terminale, allora so che va tutto bene. Se c'è qualche output, so che qualcosa è andato storto e posso controllare il file di registro per scoprire qual è il problema.
La parte del reindirizzamento che ora mi confonde è la sintassi di: 2> >( some command )
Qualcuno può spiegare cosa sta succedendo lì?
echo <(date)
, mi dà il nome del file sostituito:/dev/fd/63
. Se eseguocat <(date)
, mi dà la data, vale a dire il contenuto del file sostituito:Fri Nov 18 14:11:09 NZDT 2016
.