我下面有这个简单的脚本将压缩的MysqL转储流程并行传输到Amazon S3 bucket:
#!/bin/bash COMMIT_COUNT=0 COMMIT_LIMIT=2 for i in $(cat list.txt); do echo "$i " MysqLdump -B $i | bzip2 -zc | gof3r put -b s3bucket -k $i.sql.bz2 & (( COMMIT_COUNT++ )) if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ]; then COMMIT_COUNT=0 wait fi done if [ ${COMMIT_COUNT} -gt 0 ]; then wait fi
输出如下所示:
database1 database2 duration: 2.311823213s duration: 2.317370326s
有没有办法在每个转储一行打印这个?
database1 - duration: 2.311823213s database2 - duration: 2.317370326s
在这种情况下,echo -n开关没有帮助。
编辑:Wed May 6 15:17:29 BST 2015
我能够根据公认的答案达到预期成果:
echo "$i -" $(MysqLdump -B $i| bzip2 -zc | gof3r put -b s3bucket -k $i.sql.bz2 2>&1) &
– 但是,在subshell中运行的命令不会将退出状态返回给父shell,因为它并行运行,因此我无法验证其成功或失败。
我认为这个命令会做你想要的:
echo "$i -" `(MysqLdump -B $i | bzip2 -zc | gof3r put -b s3bucket -k $i.sql.bz2) 2>&1` &
或者,使用$()代替反引号:
echo "$i -" $( (MysqLdump -B $i| bzip2 -zc | gof3r put -b s3bucket -k $i.sql.bz2) 2>&1 ) &
echo命令将等待MysqLdump ..结果,然后尝试与$ i一起打印。子shell(…)和错误重定向2& 1确保错误消息进入回显的输出。 $之后的空格(是必需的,因为$((没有空格是不同的特殊操作 – 算术扩展)。
原文地址:https://www.jb51.cc/bash/388166.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。