gpt4 book ai didi

linux - 如何等待第一个命令完成?

转载 作者:IT王子 更新时间:2023-10-29 00:22:43 25 4
gpt4 key购买 nike

我正在用 bash 编写脚本,它在内部调用两个 bash 脚本。其中第一个脚本包括在后台运行的不同测试,第二个脚本打印第一个脚本的结果。

当我依次运行这两个脚本时,有时,第二个脚本会在第一个脚本结束之前执行,这会打印出错误的结果。

我正在使用 source 命令运行这两个脚本。有更好的建议吗?

source ../../st_new.sh -basedir $STRESS_PATH -instances $INSTANCES 
source ../../results.sh

最佳答案

Shell 脚本,不管它们是如何执行的,都是一个接一个地执行命令。因此,您的代码将在 st_new.sh 的最后一个命令完成后执行 results.sh

现在有一个特殊的命令把它搞砸了:&

cmd &

表示:“启动一个新的后台进程并在其中执行cmd。启动后台进程后,立即继续执行脚本中的下一个命令。”

这意味着 & 不会等待 cmd 执行它的工作。我的猜测是 st_new.sh 包含这样一个命令。如果是这样,那么你需要修改脚本:

cmd &
BACK_PID=$!

这会将新后台进程的进程 ID (PID) 放入变量 BACK_PID 中。然后您可以等待它结束:

while kill -0 $BACK_PID ; do
echo "Process is still active..."
sleep 1
# You can add a timeout here if you want
done

或者,如果您不想要任何特殊处理/输出

wait $BACK_PID

请注意,有些程序在您运行时会自动启动后台进程,即使您省略了 &。查看文档,他们通常可以选择将他们的 PID 写入文件,或者您可以选择在前台运行它们,然后使用 shell 的 & 命令来获取 PID。

关于linux - 如何等待第一个命令完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29889074/

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