Como ler o resultado da primeira etapa do paralelo? [fechadas]

2

PERGUNTA

No bash, você pode passar dados do passo a passo, canalizando dados:

program1 | program2 | program3 | ...

Ou você pode fazer isso com variáveis (dependendo de como cada programa funciona):

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

Eu estou procurando uma contraparte de tais dados de passagem em paralelo.

EXEMPLO

Eu tento converter meu script "linear" para o incrível paralelo (essa ferramenta ainda faz maravilhas para mim :-D), mas eu tenho um problema com a leitura e usando a saída da primeira etapa. Versão original:

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

Veja como tentei fazer isso com parallel :

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

No entanto, com este código myscript obtém alguns dados quebrados na entrada. Versão com leitura removida do resultado e segundo passo em conjunto, funciona:

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

Então, como ler a saída da primeira etapa de parallel e usá-la nas próximas etapas?

PROBLEMA

Para facilitar a depuração, digamos que meu primeiro script (script1.sh) seja:

echo "RECEIVED THIS ${1}"

E o script principal é:

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

(Eu pulei o script2 aqui para testar a captura da saída do script1). Então o resultado da execução inteira é este:

/bin/bash: THIS: command not found
/bin/bash: THIS: command not found
/bin/bash: THIS: command not found
...
    
por greenoldman 26.07.2015 / 20:09

0 respostas