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

Pravin Junnarkar:

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

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

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

source ../../st_new.sh -basedir $STRESS_PATH -instances $INSTANCES 
source ../../results.sh
亚伦·迪古拉(Aaron Digulla):

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何等待第一个完成的goroutine

如何等待第一个k期货?

如何仅等待第一个任务完成

如何等待随后链上的第一个到达结果?

如何等待2:流程2和EventWaitHandle中的第一个

如果第一个代码正在执行中,该如何等待?

如何等待任务完成并返回一个变量?

等待第一个将来用C ++完成

如何只等待数组中的第一个线程在Ruby中完成?

在Java中,如何等待所有任务,但是在出现第一个错误时停止?

我如何等待2个诺言完成,再执行另一个诺言?

如何获取第一个成功完成的未来?

Powershell 或 CMD - 我想同时运行两个命令而无需等待第一个命令完成

如何在使用RxJS并行执行其他Observable之前等待第一个Observable完成

RxJS-将Observable分为两个,等待第一个完成

有第二个okHTTP请求,等待第一个完成Android

如何等待截击响应完成然后执行下一个方法

在执行下一个操作之前,如何等待请求完成(Xcode 11)

您如何等待另一个线程提交的回调完成?

如何等待一个承诺完成,即使某些承诺被拒绝或仍在进行中?

如何等待一个函数在angularJS中完成它的执行?

在继续下一个之前,如何等待ajax调用完成?

如何等待更新完成才能移至下一个项目?

Swift:依次处理多个异步请求。如何等待上一个请求完成?

在继续下一个动画之前,我如何等待此动画完成?

在第一个命令完成或出错后运行第二个命令

让多个请求等待第一个请求完成(缓存)

Python:等待第一个子进程完成

Ajax请求等待,直到第一个AJAX调用未完成