我正在用bash编写脚本,该脚本在内部调用了两个bash脚本。第一个脚本包括在后台运行的不同测试,第二个脚本打印第一个脚本的结果。
当我一个接一个地运行这两个脚本时,有时,第二个脚本会在第一个脚本结束之前执行,这会打印错误的结果。
我正在使用source命令运行两个脚本。还有更好的建议吗?
source ../../st_new.sh -basedir $STRESS_PATH -instances $INSTANCES
source ../../results.sh
Shell脚本,无论如何执行,都将在另一个命令之后执行。因此,您的代码将results.sh
在的最后一条命令st_new.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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句