From 06d28e6087227c3e2996b8f890976d9f36843f11 Mon Sep 17 00:00:00 2001 From: Tellsanguis Date: Fri, 14 Nov 2025 22:33:35 +0100 Subject: [PATCH] Version 1.5.1: Fix bug 'unbound variable' dans les boucles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problème: - Les boucles while avec pipe (|) s'exécutent dans un sous-shell - SYNCOID_OPTS n'était pas accessible dans le sous-shell (set -u) - Erreur: "SYNCOID_OPTS: unbound variable" Corrections: - Remplacement des pipes par des here-strings (<<<) - Les boucles while s'exécutent maintenant dans le shell principal - Changement de REPLICATION_SUCCESS (string) vers REPLICATION_FAILED (int) - Variables maintenant accessibles dans toutes les boucles --- zfs-nfs-replica.sh | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/zfs-nfs-replica.sh b/zfs-nfs-replica.sh index 28e0765..5ae5971 100644 --- a/zfs-nfs-replica.sh +++ b/zfs-nfs-replica.sh @@ -11,7 +11,7 @@ # - Gère l'activation/désactivation de Sanoid selon le nœud actif # # Auteur : BENE Maël -# Version : 1.5 +# Version : 1.5.1 # set -euo pipefail @@ -449,25 +449,26 @@ if [[ -z "$FIRST_LEVEL_DATASETS" ]]; then fi log "info" "Datasets à répliquer:" -echo "$FIRST_LEVEL_DATASETS" | while read -r dataset; do +while read -r dataset; do log "info" " - ${dataset}" -done +done <<< "$FIRST_LEVEL_DATASETS" # Lancer la réplication pour chaque dataset de premier niveau # Chaque réplication est récursive, donc elle inclut tous les datasets enfants -REPLICATION_SUCCESS=true -echo "$FIRST_LEVEL_DATASETS" | while read -r dataset; do +REPLICATION_FAILED=0 + +while read -r dataset; do log "info" "=== Réplication de ${dataset} (récursif) ===" if syncoid $SYNCOID_OPTS "$dataset" "root@${REMOTE_NODE_IP}:${dataset}"; then log "info" "✓ ${dataset} répliqué avec succès" else log "error" "✗ Échec de la réplication de ${dataset}" - REPLICATION_SUCCESS=false + REPLICATION_FAILED=1 fi -done +done <<< "$FIRST_LEVEL_DATASETS" -if [[ "$REPLICATION_SUCCESS" == "true" ]]; then +if [[ $REPLICATION_FAILED -eq 0 ]]; then log "info" "✓ Réplication récursive réussie vers ${REMOTE_NODE_NAME} (${REMOTE_NODE_IP})" log "info" " Tous les datasets de ${ZPOOL} ont été synchronisés"