Une autre façon d'assurer vos erreurs de script sont capturées ainsi que les erreurs rsync, est de faire quelque chose comme ceci:
#!/bin/bash
set -eu
set -o pipefail
exec 1>/dev/null 2> >(logger -t "stderr-from-my-script")
: do some interesting things
rsync --del -az -e 'ssh -i mycrt.crt' /home/gnutt/backup/ [email protected]:backup
: do some other interesting things
Maintenant, toutes les données écrites dans stderr seront enregistrées, pas seulement celles de rsync. Cependant, ignorer stdout
est généralement une mauvaise idée quand il s'agit de déboguer, car des informations utiles qui pourraient mettre en évidence la cause d'une erreur peuvent être enregistrées là. Si vous voulez faire la différence entre stderr et stdout, juste ne traverser les cours d'eau:
exec 1> >(logger -t "stdout-from-my-script") 2> >(logger -t "stderr-from-my-script")
Pour fermer explicitement les poignées ou les restaurer, considérer les points suivants:
exec {OLD_STDOUT}>&1 {OLD_STDERR}>&2 1> >(logger -t "stdout-from-my-script") 2> >(logger -t "stderr-from-my-script")
: Do some interesting things
eval exec 1>&${OLD_STDOUT} 2>&${OLD_STDERR} ${OLD_STDOUT}>&- ${OLD_STDERR}>&-
Pour les anciennes versions de bash, vous devrez peut-être être un peu plus émoussé:
exec 3>&1 4>&2 1> >(logger -t "stdout-from-my-script") 2> >(logger -t "stderr-from-my-script")
: Do some interesting things
exec 1>&3 2>&4 3>&- 4>&-
Peut-être que vous voulez dire "à la fois stdout et stderr" pas "STDERR à la place". –
en fait, je ne l'étais qu'après stderr, car il ne devrait pas générer de sortie. – Gnutt