Bash 脚本不等待&;要完成的线程
我有一个bash脚本,它根据数据库查询的结果转储特定的数据库。为了解决这个问题,我简化了脚本摘录 脚本运行得很好,但为了加快速度,我在while循环中用{}包装了mysqldump命令,并在“done”之后添加了一个“wait”,但它不等待 同样的方法在使用“for”循环的类似脚本中也可以正常工作,它等待所有线程完成,但我不确定为什么这一个会继续执行脚本的后续步骤而不是“wait”。 有什么想法吗Bash 脚本不等待&;要完成的线程,bash,shell,parallel-processing,scripting,Bash,Shell,Parallel Processing,Scripting,我有一个bash脚本,它根据数据库查询的结果转储特定的数据库。为了解决这个问题,我简化了脚本摘录 脚本运行得很好,但为了加快速度,我在while循环中用{}包装了mysqldump命令,并在“done”之后添加了一个“wait”,但它不等待 同样的方法在使用“for”循环的类似脚本中也可以正常工作,它等待所有线程完成,但我不确定为什么这一个会继续执行脚本的后续步骤而不是“wait”。 有什么想法吗 mysql --defaults-extra-file=XX.cnf -N -e "S
mysql --defaults-extra-file=XX.cnf -N -e "SELECT dbname FROM table" | while IFS= read -r dbname
do
{
echo "Doing stuff with $dbname"
mysqldump --defaults-extra-file=XX.cnf --opt --databases "$dbname" > dump_"${dbname}".sql
echo "${dbname} dump complete"
} &
done
wait
管道的各部分在子外壳中运行。您在子shell中启动了后台进程。您不能等待由父shell中的子shell启动的进程。您只能等待由启动进程的同一shell启动的进程 确保在启动它们的同一个shell中等待。比如:
mysql --defaults-extra-file=XX.cnf -N -e "SELECT dbname FROM table" | {
while IFS= read -r dbname; do
{
echo "Doing stuff with $dbname"
mysqldump --defaults-extra-file=XX.cnf --opt --databases "$dbname" > dump_"${dbname}".sql
echo "${dbname} dump complete"
} &
done
wait
}
啊!
管道正在创建子shell
mysql --defaults-extra-file=XX.cnf -N -e "SELECT dbname FROM table" | ( while IFS= read -r dbname
do
{
echo "Dumping $dbname"
mysqldump --defaults-extra-file=XX.cnf --opt --databases "$dbname" > dump_"${dbname}".sql
echo "${dbname} dump complete"
} &
完成
等待
)我自己也记下了,并发布了我自己的答案:d