J'ai besoin d'un petit coup de main pour comprendre un comportement de bash qui m'échappe

Pour un script qui au final doit exécuter la commande :
rsync -rulptgomv --del --backup --backup-dir="$backup" --log-file="$rsync_log" --exclude-from="$exclude" "$source" "$destination"
Ce script en plus de la commande rsync (c'est sa raison d'être) renvoie des infos sur le terminal et enregistre sur 2 fichiers de log :
- script.log qui liste sommairement les exécutions successives pour s'y retrouver facilement
- rsync.log qui enregistre en plus le produit de --log-file=
Pour le débogage je remplace cette commande par : rm fake
ce qui me permet de tester mon script en plaçant ou non le fichier "fake" dans le répertoire courant.
Pour les débutants (un poil plus que moi ;-) je rappelle que :
s'il n'y a pas de fichier "fake" la sortie d'erreur = 1
Code : Tout sélectionner
$ rm fake
rm: impossible de supprimer 'fake': Aucun fichier ou dossier de ce type
$ state="$?"
$ echo "$state"
1
sinon, "fake" est supprimé et la sortie d'erreur = 0
Code : Tout sélectionner
$ rm fake
$ state="$?"
$ echo "$state"
0
Dans mon script test ça donne :
Code : Tout sélectionner
#!/bin/bash
# extrait du script
# ....
echo "Commande <rm> de simulation d'erreur" ; # test basé sur la (non)présence du fichier "fake"
rm "$destination"/fake 2> "$tmp"/error.txt && state="$?" \
&& echo -e "\n\n<rm> : commande terminée sans erreur — $state" >> "$log1" \
|| echo -e "\n\n<rm> a rencontré un problème : \
\nERROR — code : "$state" \
\n\t$(cat "$tmp"/error.txt)" >> "$log1" ;
#
#
# Messsage Sortie Rsync pour script.log
if [ "$state" = 0 ] ;
then
echo -e "\n\trsync a été exécuté sans problème => OK!" | tee -a "$log2" ;
else
echo -e "\n\trsync a rencontré un problème => error $state" ;
echo -e "\n\tLe script DATA-Rsync est prématurément interrompu \
\n\tdes modifications ont pu être faites sur la sauvegarde \
\n\tune intervention manuelle risque d'être nécéssaire... :((" | tee -a "$log2" ;
exit 1 ; # état 1 pour Notification de bureau (cmde lanceur)
fi
#
#### suite du script ####################
si la commande (rm) ne produit pas d'erreur, j'ai bien dans mon log :
<rm> : commande terminée sans erreur — 0
mais si le fichier "fake" est manquant, cela donne :
où le code de sortie d'erreur est manquant.<rm> a rencontré un problème :
ERROR -- code :
rm: impossible de supprimer '/home/dezix/tests/rsync_test/dest/fake': Aucun fichier ou dossier de ce type
Je suis certain que la variable $state est vide,
c'est probablement en lien avec : 2> "$tmp"/error.txt
mais je n'ai pas idée de comment corriger cela.

Merci pour votre aide.