Ecco come registro sia stdout che stderr nei miei script (di solito cronjobs):
#!/bin/bash
mylog() {
echo "[`date '+%Y-%m-%d %H:%M:%S'`] $1"
}
(
mylog 'start'
some-command || mylog 'error' && exit 1
mylog 'end'
) >> /var/log/my-log.log 2>&1
In alcuni script uso return invece di exit e funziona bene, ma ora dice che non posso usare return se non includo lo script con src o lo uso in una funzione. Quindi l'ho modificato per uscire, ma il problema è che non registra nulla, sembra che interrompa il >> reindirizzamento dell'output. Un altro problema è che non sarò in grado di includerlo in seguito con src, perché voglio solo interrompere questo script, non tutto.
Uso il reindirizzamento dell'output perché voglio registrare tutto, anche se non si è verificato alcun errore. E a volte i comandi non restituiscono nemmeno i codici di uscita appropriati, quindi non posso fidarmi di questo.
Quindi, come posso "restituire" in caso di errore? Conosco "set -e", ma preferisco avere un maggiore controllo su quando interrompere lo script.
qualche idea?