【发布时间】:2022-09-23 02:53:14
【问题描述】:
我一直在尝试不同的事情但没有成功
所以这就是我想要实现的目标
set -o pipefail
dump \"$@\" \"$db\" | compress | store \"single\" \"$(backupName \"$db\")\"
# I would want something that behaves a bit like this
# meaning if it dump fails, don\'t store
dump \"$@\" \"$db\" && {
#migicGetStdout | compress | store \"single\" \"$(backupName \"$db\")\"
} || {
echo failed
}
但它会在转储失败时创建一个空文件
我迷失了管道
我尝试过类似的事情
set -e
set -o pipefail
dump \"${dumpCommonArgs[@]}\" \"${dumpDbArgs[@]}\" \"$@\" \"$db\" > >(compress | store \"single\" \"$(backupName \"$db\")\")
# or
( compress | store \"single\" \"$(backupName \"$db\")\" ) < <(dump \"$@\" \"$db\") || return 2
# or
## this way compress get the global $@ ... I don\'t understand that either
store \"single\" \"$(backupName \"$db\")\" < <(dump \"${dumpCommonArgs[@]}\" \"${dumpDbArgs[@]}\" \"$@\" \"$db\") > >(compress)
# there would be an easy one
dataToStore=$(dump \"$@\" \"$db\")
rc=$?
# but this means dump is stored in memory before saving... not the best deal as mysql already needs a lot of ram to run a dump
store 函数仍然被调用!
所以似乎我错过了一些东西。
谢谢你的协助
-
管道的所有部分同时运行.所以你不能有条件地开始后面的,这取决于之前的进展:他们全部同时开始。
-
当然,如果您转储到文件而不是标准输出,您可以按照您的要求进行操作。
-
也可以确保
dump开始转储数据并仅在写入至少一行时才启动其他部分;但如果那是您想要的,请更新问题以使其清楚。 -
@CharlesDuffy 看起来有人已经建议对 1 行分钟进行测试......任何解决方案都是好的,只要它在开始写入之前不将所有转储存储在 ram 中。