質問
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
...