结合并行和顺序命令

结合并行和顺序命令

一、总结

我不明白如何在 Linux 中组合并行命令和顺序命令。


2. 预期行为

伪代码:

pip install pipenv 顺序的 pipenv install --dev

平行线任务

npm install -g grunt-cli 顺序的 npm install

Windows 批处理工作等效项:

start cmd /C "pip install pipenv & pipenv install --dev"
start cmd /C "npm install -g grunt-cli & npm install"

3.没有帮助

  1. 我不认为,那个&wait可以解决这个问题,参见rsaw评论
  2. 我读到,那GNU 并行 — 是并行任务的更好方法,但我找不到我需要使用哪种语法GNU并行,解决这个任务。
  3. 我尝试平行壳:

    parallelshell "pip install pipenv && pipenv install --dev" "npm install -g grunt-cli && npm install"
    

    完整.sh文件:

    git clone --depth 1 https://github.com/Kristinita/KristinitaPelican
    wait
    cd KristinitaPelican
    wait
    parallelshell "pip install pipenv && pipenv install --dev" "npm install -g grunt-cli && npm install"
    

    但首先pipenv install --dev命令为我运行,然后npm install。它是顺序的,而不是并行的。

答案1

简单地使用 GNUparallel:

parallel ::: 'pip install pipenv && pipenv install --dev' \
             'npm install -g grunt-cli && npm install'

答案2

与 Windows 命令等效的 Unix 风格如下:

(pip install pipenv && pipenv install --dev) >& pip.log &
(npm install -g grunt-cli && npm install) >& npm.log &

这会在后台启动两个子 shell,一个运行pip后跟pipenv(如果pip完成时没有错误),另一个运行这两个npm命令。两组命令的输出都被重定向到日志文件,以使事情易于理解。

如果您需要等待所有这些命令完成后再继续,请使用

wait

正如您已经发现的那样。

使用 POSIX 风格的 shell 对任务进行排序和并行化时,可以使用两种工具:

  • 作业控制,允许您将任务放置在后台(&在命令末尾使用),并允许您等待任务完成(使用wait
  • 子 shell,它允许您以任何您喜欢的方式分割处理单元,包括序列化需要按顺序处理的任务。

这对于简单的需求(例如您当前的任务)来说已经足够了,并且可以让您走得很远。对于更复杂的用例,存在更高级的工具; GNU Parallel 就是其中之一,如果您需要更精细的资源控制,它也值得研究批处理工具。

相关内容