並列処理の最初のステップの結果を読み取るには? [閉鎖]

並列処理の最初のステップの結果を読み取るには? [閉鎖]

質問

Bashでは、データを段階的にパイプできます。

program1 | program2 | program3 | ...

または、変数を使用してこれを実行できます(各プログラムの動作方法によって異なります)。

RES1=$(program1)
RES2=$(program2 $RES1)
...

私はこの渡されるデータへの対応を並列的に探しています。

はい

「線形」スクリプトを素晴らしい並列スクリプトに変換しようとしています(このツールはまだ驚くべきことです:-D)。しかし、最初のステップの出力を読み取って使用するのに問題があります。オリジナル:

for fn in $(ls $REV *)
do
   DATA=$(sh script1.sh ${fn})
   sh script2.sh $DATA
done

以下を使用して行う方法は次のとおりですparallel

ls $REV * | parallel -j+0 DATA=$(sh script1.sh {}) \; sh script2.sh $DATA

ただし、このコードを使用すると、myscript入力時に一部のデータが破損します。読み取り結果があり、2番目のステップが削除されたバージョンは正常に機能します。

ls $REV * | parallel -j+0 sh script1.sh {}

では、最初のステップの出力をどのように読み、次のparallelステップで使用しますか?

質問

デバッグを簡単にするために、最初のスクリプト(script1.sh)が次のようになるとします。

echo "RECEIVED THIS ${1}"

主なスクリプトは次のとおりです。

ls * | parallel -j+0 RES="$(sh script1.sh {})"

(ここではscript1の出力キャプチャをテストするためにscript2をスキップしました)。その後、実行全体の結果は次のようになります。

/bin/bash: THIS: command not found
/bin/bash: THIS: command not found
/bin/bash: THIS: command not found
...

ベストアンサー1

おすすめ記事