我是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
答案 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) &
()
如果成功sleep 10
则运行&&
,如果成功echo 10
则运行&&
,如果成功sleep 1
则运行&&
{1}} echo 1