我有这个bash脚本:
#!/usr/bin/env bash
DIRN=$(dirname "$0")
OUTPUT_PATH=${PROJECT_ROOT:-$PWD}/npm-install-output.log
(cd $(dirname "$0")/one && echo $PWD && rm -rf node_modules ; npm --loglevel=warn --progress=false install) &
(cd $(dirname "$0")/two && echo $PWD && rm -rf node_modules ; npm --loglevel=warn --progress=false install) &
(cd $(dirname "$0")/three && echo $PWD && rm -rf node_modules ; npm --loglevel=warn --progress=false install) &
wait -n; echo "EXIT CODE => $?"
EXIT=$?
echo " all done with parallel installs "
echo " => bash exit code for script '$(dirname "$0")/$(basename "$0")' => $EXIT" &&
exit ${EXIT}
来自我的日志输出,似乎非常清楚其中一个子shell在wait -n
调用之后运行。
我如何使用等待或其他构造,以便等待所有子壳完成?
答案 0 :(得分:5)
help wait
非常清楚:
如果提供了
-n
选项,则等待下一个作业终止并且 返回退出状态。
使用wait
代替wait -n
如果您对所有三个返回值感兴趣,请使用:
for i in 1 2 3 ; do
wait -n
echo "exit code $?"
done