BASH:一行打印输出

我下面有这个简单的脚本将压缩的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) &

– 但是,在subshel​​l中运行的命令不会将退出状态返回给父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确保错误消息进入回显的输出。 $之后的空格(是必需的,因为$((没有空格是不同的特殊操作 – 算术扩展)。

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...