一、总结
我不明白,如何在 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.没有帮助
- 我不认为,
&
并且wait
可以解决这个问题,请参阅rsaw 评论。 - 我读到,GNU 并行 - 是并行任务的更好方法,但我找不到,我需要在GNU 并行中使用哪种语法来解决这个任务。
我尝试并行外壳:
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
. 它是顺序的,而不是并行的。
只需使用 GNU
parallel
:Windows 命令的 Unix 风格等价物如下:
这将在后台启动两个子 shell,一个运行
pip
后跟pipenv
(如果pip
完成没有错误),另一个运行两个npm
命令。两组命令的输出都被重定向到日志文件,以保持事情的可理解性。如果您需要等待所有这些命令完成后再继续,请使用
正如你已经发现的那样。
当使用 POSIX 样式的 shell 对任务进行排序和并行化时,有两种工具可供您使用:
&
在命令末尾使用),并允许您等待它们完成(使用wait
)这对于简单的需求(例如您当前的任务)来说已经足够了,并且可以让您走得很远。对于更复杂的用例,存在更高级的工具;GNU Parallel 就是其中之一,如果您需要更好的资源控制,也值得研究批处理工具。