【问题标题】:How to execute parallel commands [duplicate]如何执行并行命令[重复]
【发布时间】:2016-04-05 18:38:25
【问题描述】:

我正在处理大型项目,我们有多个npm packages

我想并行安装所有包,这意味着我希望所有包同时运行(以节省时间),并且在最后一次安装完成后继续执行我的脚本。

示例脚本:

#!/bin/zsh
#...

NPM_FOLDERS=(
    common.library/audit
    common.library/cipher
    common.library/logger
    ...
)

# Get the number of total folders to process
counter=${#NPM_FOLDERS[@]};

# counter for user feedback to the current install folder index
index=1;

# loop and install all the required packages
for folder in $NPM_FOLDERS;
do 
    #  Print the installation message with the folder & couters
    echo "\033[38;5;255m($index/$counter) Executing npm install in: \033[38;5;226m$folder";
    
    # change the folder to the required location    
    cd $ROOT_FOLDER/$folder;
    
    # Execute install on this folder
    npm install ;
   
    # increase current index
    let index++;

done

echo
echo "\033[38;5;11mInstallation completed."
echo 

不会接受最快的答案,而是会做我想做的事情并且不知道如何做的人,所以你可以讲述时间并给出完整的答案。

非常感谢您。

【问题讨论】:

  • npm install &?不过,不确定如何显式等待后台进程。

标签: node.js bash shell ubuntu zsh


【解决方案1】:

在后台执行npm install

npm install &

然后在done 行之后,您可以等待所有后台进程完成:

wait

这个命令在bash manual中有解释:

等到每个进程 ID pid 或作业规范 jobspec 指定的子进程退出,并返回最后等待的命令的退出状态。如果给出了作业规范,则等待作业中的所有进程。如果没有给出参数,等待所有当前活动的子进程,返回状态为零。

【讨论】:

  • 但这不会等到最后一个安装。我需要安装 20 多个进程并等到最后一个完成。会有用吗?
  • 等待会做什么?它会等待所有进程吗?
  • 如果你不带参数运行wait,它会等待所有后台进程。
  • 它等待所有后台进程完成,就像我在答案中所说的那样。
  • 我添加了文档的摘录,因为您不知道如何 google。
猜你喜欢
  • 2013-09-02
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 2012-11-23
相关资源
最近更新 更多