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 填充磁盘之外的大多数原因而失败,这也会报告成功。