并行运行脚本命令

时间:2018-06-06 14:40:21

标签: linux bash shell sh

我是bash脚本,我需要在它上面运行两个并行命令

例如我正在执行npm install命令,这需要一些时间(20-50秒)

然后我按顺序在两个不同的文件夹上运行它,首先是npm install on books文件夹,第二个是 对于orders文件夹,有没有办法在shell脚本中并行运行?

例如假设脚本如下:

#!/usr/bin/env bash

   dir=$(pwd)

  cd $tmpDir/books/  

  npm install

  grunt

  npm prune production 
  cd $tmpDir/orders/

  npm install

  grunt

 npm prune production 

1 个答案:

答案 0 :(得分:3)

您可以使用var rows = "a,1,2,3,4,b,5,6,7,8".Split(','); var groupedByAlpha = rows .Aggregate(new List<ValueTuple<string, List<string>>>(), (acc, item) => { if (Char.IsLetter(item[0])) acc.Add((item, new List<string>())); else acc.Last().Item2.Add(item); return acc; }); 在后​​台运行该过程,例如:

&

要运行并等待嵌套/多个进程,您可以使用子shell #!/bin/sh cd $HOME/project/books/ npm install & cd $HOME/project/orders/ npm install & # if want to wait for the processes to finish wait ,例如:

()

在这种情况下,请注意命令在#!/bin/sh (sleep 10 && echo 10 && sleep 1 && echo 1) & cd $HOME/project/books/ (npm install && grunt && npm prune production ) & cd $HOME/project/orders/ (npm install && grunt && npm prune production ) & # waiting ... wait 内且使用(),这意味着如果左侧大小成功(退出0),则仅评估右侧,因此对于示例:

&&
  • 它会在(sleep 10 && echo 10 && sleep 1 && echo 1) &
  • 之间创建一个子shell
  • 运行()如果成功sleep 10则运行&&,如果成功echo 10则运行&&,如果成功sleep 1则运行&& {1}}
  • 通过使用echo 1
  • 结束命令在后台运行所有这些操作