一、总结
我不明白如何在 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
。它是顺序的,而不是并行的。
答案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 就是其中之一,如果您需要更精细的资源控制,它也值得研究批处理工具。