gpt4 book ai didi

mysql 在 BASH 脚本中应该返回 1 时返回 0

转载 作者:行者123 更新时间:2023-11-28 23:42:37 24 4
gpt4 key购买 nike

我正在编写一个 bash 脚本,将数据库转储到要通过 FTP 上传的文件中。它将由 cron 作业启动并且 sql server 不是本地主机。

我的脚本可以正常工作,但遇到了错误检查的障碍。如果脚本无法连接到 sql server(万一发生故障),我希望它停止并将任何问题输出到错误日志中。输出到错误日志工作正常,但脚本仍在运行并创建一个空白文件。我正在尝试使用 $?检查 mysql 连接是否失败,甚至当我使用关闭的测试服务器时,返回 0 而不是 1。我在墙上穿了一个洞,我正在用头撞它,我在做什么错了吗?

如果之前有人问过这个问题,请指出正确的方向,但我在搜索时找不到任何答案。

bash 脚本的内容:

{  
mysql -h $HOST -u $USERNAME -p$PASSWORD < dump.sql | sed "s/\t/\",\"/g;s/^/\"/;s/$/\"/" > test.csv
} 2>error.log
if [ $? -ne 0 ]; then { echo "SQL Server connection failed. Aborting" ; exit 1; } fi

最佳答案

$? 在这种情况下返回 sed 命令的结果,而不是 mysql 命令。由于 sed 命令总是成功的(您正在向它传递有效的输入和一组有效的替换),您总是会在 $? 中得到 0。

当在 bash 脚本中使用一个或多个管道命令时,您需要使用内置的 PIPESTATUS变量可以让您检查一系列管道命令中每个命令的返回值,无论您将多少个管道组合在一起。

关于mysql 在 BASH 脚本中应该返回 1 时返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34111954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com