
1. まとめ
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
この問題は解決することができます。コメントを見た。 - 私はそれを読んだGNU Parallel — タスクを並列化するより良い方法しかし、どの構文を使うべきかが見つかりません。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
単にGNUを使用してくださいparallel
:
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 &
これにより、バックグラウンドで2つのサブシェルが起動します。 1つはpip
次のコマンドを実行しpipenv
(pip
エラーなしで完了した場合)、もう1つは2つのnpm
コマンドを実行します。両方のコマンドセットの出力は、わかりやすくするためにログファイルにリダイレクトされます。
続行する前に、これらのすべてのコマンドが完了するのを待つ必要がある場合は、以下を使用してください。
wait
あなたがすでに見つけたように。
POSIXスタイルのシェルを使用して作業順序を指定して並列化するときは、次の2つのツールを使用できます。
- ジョブ制御 - バックグラウンドにジョブを配置し(
&
コマンドの最後に使用)、ジョブが完了するのを待つことができます(wait
使用 - 順次処理する必要があるタスクを直列化するなど、必要な方法で処理装置を分割できるサブシェルです。
これは、現在の作業などの単純な要件に十分であり、かなりのレベルの作業を実行できます。より複雑なユースケースには、より高度なツールがあります。 GNU Parallelがその1つであり、より詳細なリソース制御が必要な場合は、デプロイメントツールを調べることをお勧めします。