Mysql 解释一下这个贝壳管魔法(…| tee>;(tail-c1>;$PULSE)| bzip2 |…)是如何工作的?
这里是(相关的30行Mysql 解释一下这个贝壳管魔法(…| tee>;(tail-c1>;$PULSE)| bzip2 |…)是如何工作的?,mysql,bash,shell,pipe,io-redirection,Mysql,Bash,Shell,Pipe,Io Redirection,这里是(相关的30行bash代码突出显示) 这里简化了(s3是一个二进制文件,它流到对象存储)。点(…)是未张贴在此处的选项 PULSE=$(mktemp -t shield-pipe.XXXXX) trap "rm -f ${PULSE}" QUIT TERM INT set -o pipefail mysqldump ... | tee >(tail -c1 >$PULSE) | bzip2 | s3 stream ... 这到底是怎么回事?你能解释一下这个重定向和管道是如何
bash
代码突出显示)
这里简化了(s3
是一个二进制文件,它流到对象存储)。点(…)是未张贴在此处的选项
PULSE=$(mktemp -t shield-pipe.XXXXX)
trap "rm -f ${PULSE}" QUIT TERM INT
set -o pipefail
mysqldump ... | tee >(tail -c1 >$PULSE) | bzip2 | s3 stream ...
这到底是怎么回事?你能解释一下这个重定向和管道是如何工作的吗?如何调试错误
mysqldump:write时出现错误32
。手动调用时(仅限)mysqldump
不会出错。棘手的部分是:
写入标准输出和文件tee
创建可写进程替换(一个模拟可写文件行为的命令)>(cmd)
mysqldump
的输出有效地传输到另外两个命令中:tail-c1
将最后一个字节打印到文件中,以及bzip2
压缩流
正如伊尼安在评论中指出的那样,错误32来自一根断裂的管道。我猜这是由于s3流的终止(可能是超时?)导致管道中前面的命令失败。错误32对应于管道破裂。看起来
bzip2
完成了,因此关闭了管道的一端进行读取,但是mysqldump
一直在向管道写入数据