Quiero comprimir el volcado de sql si y solo si mysqldump no produce ningún error. Trato de poner la contraseña incorrecta, pero todavía ejecuta el gzip.
mysqldump -u username -ppassword dbname |& if [ $? == 0 ]; then gzip > test.gz; else echo "error"; fi
¿Qué pasa con mi comando o hay alguna solución mejor?
Respuesta aceptada:
Creo que podrías eliminar |&
(La razón es que no necesita canalizar ni stdout ni stderr en el siguiente condicional, en todo caso, puede usar ';' como separador de comando). Algo como esto probablemente debería funcionar:
#!/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
Editar:para verificar el éxito del gzip, podría hacer algo como esto:
mysqldump -u myuser -p mypasswd | gzip > mydb.dump.gz && echo "success" || echo "failure"
Sin embargo, esto reportaría el éxito incluso si mysqldump
falló, es decir, si la copia de seguridad falló por la mayoría de las razones que no sean gzip llenando el disco.