Shell
結合併行和順序命令
一、總結
我不明白,如何在 Linux 中組合併行和順序命令。
- 預期行為
虛擬碼:
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
:parallel ::: 'pip install pipenv && pipenv install --dev' \ 'npm install -g grunt-cli && npm install'
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
)- 子外殼,它允許您以任何您喜歡的方式拆分處理單元,包括需要按順序處理的序列化任務。
這對於簡單的需求(例如您目前的任務)來說已經足夠了,並且可以讓您走得很遠。對於更複雜的案例,存在更高級的工具;GNU Parallel 就是其中之一,如果您需要更好的資源控制,也值得研究批處理工具。