使用$?在bash中并行运行多个命令时

时间:2014-04-08 20:46:02

标签: bash

我正在为WebSEAL创建一个启动/关闭脚本。它被编写为允许多个实例并行停止/启动。唯一的问题是验证它没有问题就完成了。对于其他基础结构,我可以简单地在输出中查找特定关键字(我将其重定向到日志文件),但WebSEAL不会给出任何成功/错误消息。

相反,我想用$?将退出状态抛出到动态变量中,该变量将在启动发生后进行检查(在日志合并期间)。

这是启动/停止然后创建变量

的代码
${PDCOMMAND} >> ${LOGDIR}/${APP}.txt 2>&1 &
let return_${APP}=$?

PDCOMMAND是一个有效的启动/停止命令:aka pdweb start my_instance

APP是实例的名称:aka my_instance

目标是当我在脚本中稍后检查它时,return _ $ {APP}(return_my_instance)的值为0(成功)或1(失败)。

使用$有问题吗?对于在设置时可能尚未在技术上完成的命令,还是在完成时设置它?所以,假设我有3个实例

instance_1,instance_2,instance_3

如果我运行以下内容:

pdweb start instance1 &
let return_instance_1 = $?
pdweb start instance2 &
let return_instance_2 = $?
pdweb start instance_3 &
let_return_instance_3 = $?

如果return_instance_ [1 | 2 | 3]以不等的时间开始,它们会有正确的值吗?例如,如果instance_3在instance_1之前启动,它是否仍会将instance_3的结果输出到return_instance_3?

基本上,我试图弄清楚命令行如何处理关于退出状态的异步请求。

提前致谢

1 个答案:

答案 0 :(得分:2)

没有;退出状态代码仅在命令完成时可用。 (这就是为什么它被称为“退出状态”。)如果你成功生成了一个服务并且它已启动并运行,它还没有退出状态。

如果我能够正确猜出你想要完成什么,你可以在启动每个实例后获得$!的值,等待“合理”的时间(几秒钟?)并检查您启动的进程仍在运行。如果他们已经终止,那就有问题。