Chci zazipovat výpis SQL pouze tehdy, když mysqldump nevyvolá žádnou chybu. Snažím se zadat špatné heslo, ale stále to provádí gzip.
mysqldump -u username -ppassword dbname |& if [ $? == 0 ]; then gzip > test.gz; else echo "error"; fi
Co je špatného na mém příkazu nebo existuje nějaké lepší řešení?
Přijatá odpověď:
Myslím, že byste mohli odstranit |&
(Důvodem je, že nemusíte do další podmíněné vkládat stdout ani stderr, pokud něco můžete použít jako oddělovač příkazů „;“). Něco takového by pravděpodobně mělo fungovat:
#!/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
Edit:Chcete-li zkontrolovat úspěšnost gzip, můžete udělat něco takového:
mysqldump -u myuser -p mypasswd | gzip > mydb.dump.gz && echo "success" || echo "failure"
To by však hlásilo úspěch, i když mysqldump
selhalo, tj. pokud záloha selhala z většiny jiných důvodů, než je zaplnění disku gzip.