仅当 mysqldump 不出错时如何进行 gzip?

5 pipe shell-script exit-status

当且仅当 mysqldump 不产生任何错误时,我想压缩 sql 转储。我尝试输入错误的密码,但它仍然执行 gzip。

 mysqldump -u username -ppassword dbname |& if [ $? == 0 ]; then gzip > test.gz; else echo "error"; fi
Run Code Online (Sandbox Code Playgroud)

我的命令有什么问题或者有更好的解决方案吗?

小智 5

我认为你可以删除|&(原因是你不需要将 stdout 或 stderr 通过管道传输到下一个条件,如果有的话,你可以使用 ';' 作为命令分隔符)。像这样的东西可能应该有效:

#!/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
Run Code Online (Sandbox Code Playgroud)

编辑:要检查 gzip 是否成功,您可以执行以下操作:

mysqldump -u myuser -p mypasswd | gzip > mydb.dump.gz && echo "success" || echo "failure" 
Run Code Online (Sandbox Code Playgroud)

然而,即使mysqldump失败,即如果备份因除 gzip 填充磁盘之外的大多数原因而失败,这也会报告成功。