異なる名前を持つ複数のbashスクリプトを並列に実行する

異なる名前を持つ複数のbashスクリプトを並列に実行する

特定の変数名の個々のインスタンスごとにコマンドを並列に実行する必要があります。変数は4個でも100個でもかまいません。たとえば、次のような特定のデータセットがあるとします。

datanames='KQPW KMMX KMKO KZAO'

互いに並列に実行される各プロセスに対してプロセスを実行する必要があります。つまり、KQPWに対してprocess1を実行し、KMMXに対してprocess1を実行する必要があるなどの操作が行われます。 Process1 には変数名に基づく入力が必要です。

私が読んだチュートリアルと予備調査でGNU 'パラレル'コマンドをインストールしました。すべてのデータ名を「run.txt」というテキストファイルに入れました。

KQPW.csh
KMMX.csh
KMKO.csh
KZAO.csh

これらの各.cshファイルには、process1の必須入力として一意の変数名を使用してprocess1を呼び出すコマンドが含まれています。問題は、これら4つのコマンドを同時に実行する方法です。私は試した:

cat run.txt | parallel

しかし、何も起こりませんでした。どんなアイデアがありますか?

ベストアンサー1

外部ツールを使用せずに並列記述に基づいて実行スクリプトをすばやく実証します。

#!/bin/bash
datanames='KQPW KMMX KMKO KZAO'
datanamesarray=($datanames)
for item in ${datanamesarray[@]}; do
  ( ./${item}.csh; sleep 10 ) &
done
echo waiting..
wait
echo done

waiting..すべてのサブシェルが並列に実行されるため、このコマンドを実行してから10秒の遅延が発生します。wait続行する前に、すべてのサブシェルが終了するまで親スクリプトが一時停止されます。ここでは説明目的でechosleepおよび文がwait使用されました。

おすすめ記事