这个问题在这里已经有答案了:
管道输出和捕获bash中的出口状态(15个答案)
两年前关门了。
mysqldump --verbose -h $dbhost --max_allowed_packet=1G --extended-
insert --single-transaction --add-drop-database --opt $dbname --
user=$dbusername --password=$dbpassword | gzip -1 > $filename.sql.gz
echo $?
我在bash脚本中使用上述代码获取mysql转储并gzip它。
在允许脚本继续运行之前,我想确认mysqldump是否成功。例如,如果找不到主机,如何捕获该错误?
我不确定如何做到这一点。用上述方法得到的电流输出如下:
mysqldump: Got error: 2005: Unknown MySQL server host 'test' (0) when
trying to connect
0
为什么在找不到主机的情况下获得0成功代码?我认为这是因为gzip仍然成功地生成了一个空文件…但是我不知道如何解决这个问题。
2条答案
按热度按时间dldeef671#
使用管道(|)时,仅捕获管道的最后一个命令的出口值。但我们可以通过使用
set -o pipefail
. 这将捕获管道中的非零出口代码让你的schell脚本总是这样
例子:
的退出状态
false
总是1。(或)
你也可以使用
PIPESTATUS
如下所示我宁愿和你一起去
set -o pipefail
在shell脚本中。和
关于捕获错误,在执行脚本时,将stderr重定向到一个文件以捕获实际错误。
示例:文件名为backup.sh
这样,如果备份工作正常,一切正常,如果失败,我们捕获错误。
mfpqipee2#
你是说这样的事吗
您可以执行以下操作来检查mysql错误并继续gzip压缩