병렬 처리의 첫 번째 단계 결과를 읽는 방법은 무엇입니까? [폐쇄]

병렬 처리의 첫 번째 단계 결과를 읽는 방법은 무엇입니까? [폐쇄]

질문

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입력 시 일부 데이터가 손상됩니다. 읽기 결과가 있고 두 번째 단계가 제거된 버전은 정상적으로 작동합니다.

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

관련 정보