ファイルからコマンドを読み取るには?

ファイルからコマンドを読み取るには?

phpたとえば、順番に実行されるいくつかのスクリプトがあります。

php index.php import file1 --offline &&
php index.php import file2 --deleteUnused &&
php index.php import file3

今、私はこのparallelコマンドを新たに見つけて、次のことを試しました。

parallel -j 3 -- "php index.php import file1 --offline" "php index.php import file2 --deleteUnused" "php index.php import file3"

そしてそれは素晴らしい作品です。

上記のすべてのコマンドを含むファイルを持ち、parallelオプションを使用してファイルからコマンドの読み取りを開始できますか?

このような:

parallel -XX myFileWithCommands.txt

答え1

作るmyFileWithCommands.txt

php index.php import file1 --offline
php index.php import file2 --deleteUnused
php index.php import file3

その後実行平行線このように:

parallel -j 3 -- < myFileWithCommands.txt

答え2

まあ、私はこれを達成する2つの簡単な方法を想像できます。ファイルの内容にパイプするか、parallelシェルスクリプトを作成できます。達成したいのがこの特定の作業セットだけであれば、シェルスクリプトがより適している可能性があります。これは非常に短くて簡単で、ポイントだけを説明します。

#!/bin/sh
parallel -j 3 -- "php index.php import file1 --offline" "php index.php import file2 --deleteUnused" "php index.php import file3"

もう少し一般的なものが必要な場合(たとえば、複数のコマンドセットを1つにロードできます)、単純なファイル形式を作成してからファイルの内容をパイピングすることから始めるのが簡単になりますparallel

最も簡単な方法は、実行したいコマンドをそのままテキストに含めることです。

たとえば、これがテキストファイル(test.txt)の場合:

"php index.php import file1 --offline" "php index.php import file2 --deleteUnused" "php index.php import file3"

その後、次のコマンドを実行すると機能します。

$ cat test.txt | parallel -j 3 -- 

少し複雑なファイル形式を試すこともできます(たとえば、各コマンドは引用符で囲むことなく新しい行に表示されます)。この方法を使用するには、ファイルを転送する前にファイルを少し分析する必要がありますparallelawk

awk '<whatever patterns you match> { do something }' | parallel -j3 --ただし、より柔軟で類似したファイル形式を作成することを決定した場合は、毎回入力する必要がないようにヘルパーシェルスクリプト(または関数)を作成すると便利です。

関連情報