后台进程结束后如何继续执行脚本?

时间:2020-07-24 10:42:33

标签: bash loops background-process

早上好

我有这个变量

NODES="lep1mk17 lep1mk18 lep1mk19"

我正在执行此循环(我想使用并行进程)

56 for i in $NODES
57 do
58        java -jar jmxterm-1.0.1-uber.jar --url <url:port> -i $LOGDIR/$i > $LOGDIR/$i.out &
59        pid-$i=$!
60 done

在这种情况下,我将在后台运行3个进程。

要知道它们何时完成,我使用变量pid-$i

这时我想停止脚本,直到后台进程结束为止,所以我这样做:

62 for i in $NODES
63 do
64        wait $(pid-$i)
65 done

执行脚本时出现一些错误:

./countMessagesTopicV4.sh: line 59: pid-lep1mk17=30491: command not found
./countMessagesTopicV4.sh: line 59: pid-lep1mk18=30493: command not found
./countMessagesTopicV4.sh: line 59: pid-lep1mk19=30495: command not found
./countMessagesTopicV4.sh: line 64: pid-lep1mk17: command not found
./countMessagesTopicV4.sh: line 64: pid-lep1mk18: command not found
./countMessagesTopicV4.sh: line 64: pid-lep1mk19: command not found
emedina@goku:~/script/kafka$ 

有人可以帮助我找到我的错误吗?

1 个答案:

答案 0 :(得分:0)

变量名必须是文字,不能像现在那样仅将表达式用作变量名。 (而且变量名中不能包含-,但这是第二个问题)

bash具有关联的数组变量:您想要

59: pid[$i]=$!

...

64: wait ${pid[$i]}