C'est ainsi que je consigne à la fois stdout et stderr dans mes scripts (généralement des 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
Dans certains scripts, j'utilise return au lieu de exit et cela fonctionne bien, mais maintenant il dit que je ne peux pas utiliser return à moins d'inclure le scripts avec src ou de l'utiliser dans une fonction. Je l'ai donc changé en exit, mais le problème est que cela n'enregistre rien, il semble que cela arrête la >> redirection de sortie. Un autre problème est que je ne pourrai pas l'inclure plus tard avec src, parce que je veux seulement arrêter ce scripts, pas tout.
J'utilise la redirection de sortie parce que je veux tout enregistrer, même si aucune erreur ne s'est produite. Et parfois, les commandes ne renvoient même pas les codes de sortie appropriés, donc je ne peux pas faire confiance à cela.
Alors comment puis-je "retourner" en cas d'erreur ? Je connais 'set -e', mais je préfère avoir plus de contrôle sur le moment où il faut arrêter le script.
Des idées ?