fix(scripts): capturer CSV via fichier tmp — évite la perte du buffer expect sur Linux

This commit is contained in:
MaksTinyWorkshop
2026-03-26 18:43:21 +01:00
parent ba772da50c
commit 69101cfc77
2 changed files with 24 additions and 16 deletions

View File

@@ -28,23 +28,27 @@ _load_global_secrets() {
echo "Chargement des secrets globaux..." >&2 echo "Chargement des secrets globaux..." >&2
# Export CSV complet — une seule ouverture du coffre # Export CSV complet — via fichier temporaire pour capturer tout le stdout
local csv local tmpfile
csv=$(KDBX_PASSWORD="$KDBX_PASSWORD" SECRETS_KDBX="$SECRETS_KDBX" expect <<'EOF' tmpfile=$(mktemp)
KDBX_PASSWORD="$KDBX_PASSWORD" SECRETS_KDBX="$SECRETS_KDBX" TMPFILE="$tmpfile" expect <<'EOF'
log_user 0 log_user 0
set timeout 30 set timeout 30
set fh [open $env(TMPFILE) w]
spawn keepassxc-cli export --format csv $env(SECRETS_KDBX) spawn keepassxc-cli export --format csv $env(SECRETS_KDBX)
expect "Saisir le mot de passe pour déverrouiller*" expect "Saisir le mot de passe pour déverrouiller*"
send -- "$env(KDBX_PASSWORD)\r" send -- "$env(KDBX_PASSWORD)\r"
expect eof expect eof
puts $fh $expect_out(buffer)
close $fh
catch wait result catch wait result
puts -nonewline $expect_out(buffer)
exit [lindex $result 3] exit [lindex $result 3]
EOF EOF
) || { local rc=$?
echo "Impossible d'exporter le coffre." >&2 local csv
return 1 csv=$(cat "$tmpfile")
} rm -f "$tmpfile"
[ $rc -ne 0 ] && { echo "Impossible d'exporter le coffre." >&2; return 1; }
# Parser le CSV avec python3 — gère les champs multilignes et les virgules dans les valeurs # Parser le CSV avec python3 — gère les champs multilignes et les virgules dans les valeurs
# On cherche la ligne d'en-tête CSV pour ignorer le bruit du buffer expect # On cherche la ligne d'en-tête CSV pour ignorer le bruit du buffer expect

View File

@@ -39,23 +39,27 @@ _sync_service_secrets() {
echo "Sync des secrets de service..." >&2 echo "Sync des secrets de service..." >&2
# Export CSV complet — une seule ouverture du coffre # Export CSV complet — via fichier temporaire pour capturer tout le stdout
local csv local tmpfile
csv=$(KDBX_PASSWORD="$KDBX_PASSWORD" SECRETS_KDBX="$SECRETS_KDBX" expect <<'EOF' tmpfile=$(mktemp)
KDBX_PASSWORD="$KDBX_PASSWORD" SECRETS_KDBX="$SECRETS_KDBX" TMPFILE="$tmpfile" expect <<'EOF'
log_user 0 log_user 0
set timeout 30 set timeout 30
set fh [open $env(TMPFILE) w]
spawn keepassxc-cli export --format csv $env(SECRETS_KDBX) spawn keepassxc-cli export --format csv $env(SECRETS_KDBX)
expect "Saisir le mot de passe pour déverrouiller*" expect "Saisir le mot de passe pour déverrouiller*"
send -- "$env(KDBX_PASSWORD)\r" send -- "$env(KDBX_PASSWORD)\r"
expect eof expect eof
puts $fh $expect_out(buffer)
close $fh
catch wait result catch wait result
puts -nonewline $expect_out(buffer)
exit [lindex $result 3] exit [lindex $result 3]
EOF EOF
) || { local rc=$?
echo "Impossible d'exporter le coffre." >&2 local csv
return 1 csv=$(cat "$tmpfile")
} rm -f "$tmpfile"
[ $rc -ne 0 ] && { echo "Impossible d'exporter le coffre." >&2; return 1; }
# Parser le CSV avec python3 — gère les champs multilignes et les virgules dans les valeurs # Parser le CSV avec python3 — gère les champs multilignes et les virgules dans les valeurs
# On cherche la ligne d'en-tête CSV pour ignorer le bruit du buffer expect # On cherche la ligne d'en-tête CSV pour ignorer le bruit du buffer expect