web-dev-qa-db-ja.com

パラレルを使用して入力なしでスクリプトを実行する

GNU parallelを使用してスクリプトの多くのインスタンスを実行しようとしていますが、スクリプトは引数を取りません。

「parallel foo.sh」を実行すると、次のようになります。

parallel: Warning: Input is read from the terminal. Only experts do this on purpose. Press CTRL-D to exit.
10
user1700840

10回実行したい場合、次の構文が機能します。

parallel -n0 foo.sh ::: {1..10}

parallelにはある程度の長さの入力シーケンス(::: {1..10})が必要であり、入力シーケンス(-n0)の内容を無視する必要がある場合は、その長さのみを考慮します。

元のコマンドparallel foo.shには、必要な並列度を示す入力シーケンスが含まれていません。不可解な警告は、parallelが入力シーケンスのターミナルをリッスンし始めること、そしてこれはおそらくあなたが望むものではないことを伝えています。

これがチュートリアルの例です:

seq 10 | parallel -n0 my_command my_args

使い方:

  • parallelは常にどこかから入力シーケンスを取ります。 ::: ORファイルまたはパイプなどのファイルのようなソースからの改行で区切られたシーケンスが前に付いた、インラインのスペース区切りシーケンスです。この例では、入力シーケンスはパイプ。
  • seq 10は、改行で区切られた1から10の数字のシーケンスを生成します。
  • -n0オプションは、入力シーケンスの値を無視するようにparallelに指示します。気になるのはシーケンスの長さであり、その内容ではありません。数字が使用されていない場合でも、コマンドは10回実行されます。

もう一つの例:

parallel -n0 echo -n 'x' ::: {1..5}

使い方:

  • 入力シーケンスはインラインです。
  • {1..5}は、スペースで区切られた1から5までの数字のシーケンスを生成します。
  • -n0はシーケンス値を無視します(代わりに文字列'x'を毎回エコーします)。
  • 出力:xxxxx

と比較:

parallel echo -n ::: {1..5}

使い方:

  • 入力シーケンスはインラインです。
  • {1..5}は、スペースで区切られた1から5までの数字のシーケンスを生成します。
  • 入力シーケンスの各値は、echoへの引数として使用されます。注文は保証されません。
  • 出力:43215。任意の順序である可能性があります。
10
jwfearn

マニュアルの例を読みましたか?具体的には https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Run-the-same-command-10-times

1
Ole Tange