並列および順次コマンドの組み合わせ

並列および順次コマンドの組み合わせ

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. 役に立たない

  1. 私はそうは思わない&そしてwaitこの問題は解決することができます。コメントを見た
  2. 私はそれを読んだGNU Parallel — タスクを並列化するより良い方法しかし、どの構文を使うべきかが見つかりません。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

単に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次のコマンドを実行しpipenvpipエラーなしで完了した場合)、もう1つは2つのnpmコマンドを実行します。両方のコマンドセットの出力は、わかりやすくするためにログファイルにリダイレクトされます。

続行する前に、これらのすべてのコマンドが完了するのを待つ必要がある場合は、以下を使用してください。

wait

あなたがすでに見つけたように。

POSIXスタイルのシェルを使用して作業順序を指定して並列化するときは、次の2つのツールを使用できます。

  • ジョブ制御 - バックグラウンドにジョブを配置し(&コマンドの最後に使用)、ジョブが完了するのを待つことができます(wait使用
  • 順次処理する必要があるタスクを直列化するなど、必要な方法で処理装置を分割できるサブシェルです。

これは、現在の作業などの単純な要件に十分であり、かなりのレベルの作業を実行できます。より複雑なユースケースには、より高度なツールがあります。 GNU Parallelがその1つであり、より詳細なリソース制御が必要な場合は、デプロイメントツールを調べることをお勧めします。

関連情報