Voglio comprimere il dump sql se e solo se mysqldump non produce alcun errore. Provo a inserire la password sbagliata, ma esegue comunque il gzip.
mysqldump -u username -ppassword dbname |& if [ $? == 0 ]; then gzip > test.gz; else echo "error"; fi
Qual è il problema con il mio comando o esiste una soluzione migliore?
Risposta accettata:
Penso che potresti rimuovere |&
(il motivo è che non è necessario convogliare né lo stdout né lo stderr nel condizionale successivo, semmai puoi semplicemente usare ";" come separatore di comandi). Qualcosa del genere dovrebbe probabilmente funzionare:
#!/bin/bash
mysqldump -u myuser -p mypasswd > mydb.dump
if [[ $? -eq 0 ]]; then
gzip mydb.dump
else
echo >&2 "DB backup failed"
exit 1
fi
Modifica:per verificare il successo di gzip potresti fare qualcosa del genere:
mysqldump -u myuser -p mypasswd | gzip > mydb.dump.gz && echo "success" || echo "failure"
Tuttavia questo segnalerebbe il successo anche se mysqldump
fallito, ovvero se il backup non è riuscito per la maggior parte dei motivi diversi dal riempimento del disco con gzip.