gpt4 book ai didi

BASH:在一行上打印输出

转载 作者:行者123 更新时间:2023-11-29 08:45:05 24 4
gpt4 key购买 nike

我在下面有这个简单的脚本,可以将压缩的 MySQL 转储并行流式传输到 Amazon S3 存储桶:

#!/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 开关在这种情况下没有帮助。

编辑:2015 年 5 月 6 日星期三 15:17:29 BST

我能够根据已接受的答案实现预期结果:

echo "$i -" $(mysqldump -B $i| bzip2 -zc | gof3r put -b s3bucket -k $i.sql.bz2 2>&1) &

- 但是,在子 shell 中运行的命令不会将退出状态返回给父 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 确保错误消息也进入回显输出。 $( 之后的空格是必需的,因为没有空格的 $(( 是一种不同的特殊运算 — 算术展开。

关于BASH:在一行上打印输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30017154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com