【问题标题】:Run script command on parallel并行运行脚本命令
【发布时间】:2018-06-06 14:40:20
【问题描述】:

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

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

我依次在两个不同的文件夹上运行它,第一个是 npm install on books 文件夹,第二个是 对于订单文件夹,有没有办法在 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 

【问题讨论】:

标签: linux bash shell sh


【解决方案1】:

你可以使用&在后台运行进程,例如:

#!/bin/sh

cd $HOME/project/books/
npm install &

cd $HOME/project/orders/
npm install &

# if want to wait for the processes to finish
wait

要运行并等待嵌套/多个进程,您可以使用子shell () 例如:

#!/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,如果成功&&,则运行echo 1
  • 通过以& 结束命令,在后台运行所有这些

【讨论】:

  • 您应该添加“wait”关键字,然后让脚本在继续之前等待其所有子进程
  • 谢谢 1+ ,如果我为每个文件夹运行 npm install 然后 grunt 然后 npm prone production 我应该为每个文件夹都这样做,它会一个接一个地开始,不会有勾结?
  • @JennyHilton 我更新了答案,希望能给你一些想法
  • 非常感谢,我现在就试试,让您知道! :)
  • 这正是我需要的,顺便说一句,它只能像这样(npm install && grunt && npm prune production ) & 吗?我问它,因为我生成了这个脚本,我想在命令之间添加评论......