2

我在执行 a 的 shell 脚本中有以下命令mysql dump,然后通过 ssh 将该 SQL 文件加载到远程数据库中,然后更新时间戳。

1. mysqldump -u root files path | gzip -9 > $SQL_FILE
2. cat $SQL_FILE | ssh -i ~/metadata.pem ubuntu@1.2.3.4 
    "zcat | mysql -u 'root' -h 1.2.3.4 metadata"
3. TIMESTAMP=`date "+%Y-%m-%d-%T"`
4. mysql -u 'root' -h 1.2.3.4 metadata -e "UPDATE path_last_updated SET timestamp=DEFAULT"

有什么办法可以改进上述命令。例如,如果第 2 行失败(例如,由于连接问题),但第 4 行成功,会发生什么情况?

我如何使第 4 行运行以第 2 行的成功为条件?

4

2 回答 2

2

您可以将所有内容链接在一个块中:

mysqldump -u root files path |
    gzip -9 |
     ssh -i ~/metadata.pem ubuntu@1.2.3.4 "zcat |\
                   mysql -u 'root' -h 1.2.3.4 metadata"  &&
    mysql -u 'root' -h 1.2.3.4 metadata -e "
        UPDATE path_last_updated SET timestamp=DEFAULT"

因此,如果之前出现故障,则不会执行最后一个 mysql 命令。

于 2013-02-03T22:36:19.413 回答
1

可以$?用于获取最后一条命令的返回码,如果不为0,则失败。

或者您可以使用&&例如:cmd1 && cmd2

set -e或者,如果发生错误,您可以使用停止脚本。

于 2013-02-03T22:24:39.767 回答