gpt4 book ai didi

mysql - Bash while 循环等待 mysql 导入

转载 作者:行者123 更新时间:2023-11-29 06:07:07 25 4
gpt4 key购买 nike

我正在尝试创建一个 bash 脚本来初始化数据库。现在一切顺利——我已经能够创建数据库、创建用户并授予用户对数据库的权限。

现在开始运行导入脚本。我可以简单地通过运行 mysql 命令来完成,但是用户可能会坐在那里一两分钟而没有任何反馈。

所以我决定在命令运行时使用微调器。

i=0
spin='-\|/'
echo "Beginning Data Import. This may take a while..."
while ((mysql -u$newUser -p$newPassword -D$dbName < import.sql) &>/dev/null &); do
i=$(( (i+1) %4 ))
printf "\rImporting milestone SQL (All data)... ${spin:$i:1}"
sleep .3
done

我已经使用了这个命令的其他变体,但它们似乎都导致了任何一个

a) 微调器会一直运转下去。它永远不会停止,或者

b) 它多次运行 mysql import 命令

我试过使用谷歌搜索,但似乎找不到任何可以回答我问题的内容。大多数似乎表明我可以做类似的事情

while ((mysql -u$newUser -p$newPassword -D$dbName < l1jdb_m9.sql) &>/dev/null &) != 1 

但这似乎也不起作用,导致语法错误,或者通常是无限循环。

最佳答案

当你这样做时:

while ((mysql -u$newUser -p$newPassword -D$dbName < l1jdb_m9.sql) &>/dev/null &)

...shell 正在启动 mysql在后台。

(mysql -u$newUser -p$newPassword -D$dbName < l1jdb_m9.sql) &>/dev/null & 的结果几乎总是一个真值:也就是说,启动命令会成功。 while收到这个真实的结果并开始迭代。在循环结束时,它再次运行表达式,看它是否应该继续迭代。由于表达式再次运行,mysql再次在后台执行,并再次返回成功。

循环将永远执行此操作,启动一个新的 mysql每次迭代都在后台执行命令。由于您是在后台启动的,因此无需等待结果;它是即发即弃的,并且始终返回 true。

如果你想等待命令完成,你可以这样做:

mysql -u$newUser -p$newPassword -D$dbName < import.sql &>/dev/null &
mysql_pid=$!
while (ps -p $mysql_pid >&-);
do
i=$(( (i+1) %4 ))
printf "\rImporting milestone SQL (All data)... ${spin:$i:1}"
sleep .3
done

捕获子进程的 PID ($!),然后检查每个循环迭代以查看进程是否仍在运行,ps -p . >&-丢弃输出,ps如果进程正在运行则返回 true,否则返回 false。这将在每次迭代中重新评估,因此循环将在过程完成时结束。

关于mysql - Bash while 循环等待 mysql 导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40832216/

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