有人可以向我解释为什么这不起作用吗?
/usr/bin/mysqld_safe
STATUS=$(/usr/bin/pgrep mysql | wc -l)
while $STATUS -eq 0; do
echo "$STATUS"
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
它违背任何逻辑。是的,我不熟悉 bash :)
ps 我试图等到服务启动,但运行此命令后,甚至不会打印 echo“$STATUS”!所以循环没有运行
这运行mysqld_safe:
/usr/bin/mysqld_safe
Run Code Online (Sandbox Code Playgroud)
运行pgrep并将结果存储在 STATUS 中:
STATUS=$(/usr/bin/pgrep mysql | wc -l)
Run Code Online (Sandbox Code Playgroud)
STATUS 永远不会再更新。此循环使用 STATUS 的常量固定值:
while $STATUS -eq 0; do
echo "$STATUS"
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
请注意,while 循环中的测试格式错误。它应该是:
while [ "$STATUS" -eq 0 ]; do
Run Code Online (Sandbox Code Playgroud)
要获得实时更新,pgrep应在循环内运行。此外,因为pgrep设置了退出代码,所以测试命令[...]是多余的:
要在没有 mysql 实例时保持循环运行:
while ! /usr/bin/pgrep mysql >/dev/null; do
Run Code Online (Sandbox Code Playgroud)
pgrep当找到匹配的进程时返回成功(退出代码=0)。由于您似乎希望在没有匹配进程时重复循环,因此我们使用 反转退出代码!。
或者,将它们全部重新组合在一起:
/usr/bin/mysqld_safe
while ! /usr/bin/pgrep mysql >/dev/null; do
echo "No such process"
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
假设mysqld_safe成功启动,while循环将永远不会运行。您应该只看到 while 循环无法mysqld_safe启动的输出。
如果您想要持续更新状态:
/usr/bin/mysqld_safe
while true; do
/usr/bin/pgrep mysql >/dev/null
echo "Current status: $?"
sleep 1
done
Run Code Online (Sandbox Code Playgroud)