У меня есть этот простой script ниже для потоковой передачи сжатых 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
не помогает.
РЕДАКТИРОВАТЬ: ср. 6 мая 15:17:29 BST 2015
Я смог достичь ожидаемых результатов на основе принятого ответа:
echo "$i -" $(mysqldump -B $i| bzip2 -zc | gof3r put -b s3bucket -k $i.sql.bz2 2>&1) &
- однако команда, запущенная в подоболочке, не возвращает статус завершения родительской оболочке, потому что она работает параллельно, поэтому я не могу проверить, выполнено ли это или не удалось.