Gnu 및 bash 배열 병렬성

Gnu 및 bash 배열 병렬성

GNU를 사용하여 recon-all 명령을 병렬로 실행해 보았습니다.무료 서퍼 전처리8개의 특허를 동시에 실행하는 bash 환자 목록 배열이 있습니다.

root@4d8896dfec6c:/tmp# echo ${ids[@]}
G001 G002 G003 G004 G005 G006 G007 G008

다음 명령으로 실행해 보세요.

echo ${ids[@]} | parallel --jobs 28 recon-all -s {.} -all -qcache

다음과 같이 ls 표현에 bash 배열을 사용해야 하기 때문에 작동하지 않습니다.

ls ${ids[@]} | parallel --jobs 28 recon-all -s {.} -all -qcache

어떻게 해야 하나요?

답변1

ID가 단일 명령줄에 맞는 경우:

parallel --jobs 28 recon-all -s {.} -all -qcache ::: "${ids[@]}"

Lucas가 제안한 기타 사항:

printf %s\\n "${ids[@]}" | parallel --jobs 28 recon-all -s {.} -all -qcache

답변2

문제는 parallel입력이 줄바꿈으로 구분되기를 원하지만 echo사용하면 공백으로 구분된다는 것입니다. 줄 바꿈으로 구분된 일부 단어를 인쇄하려면 다음 중 하나를 시도할 수 있습니다.

echo one two three | tr ' ' '\n'    # in case your input can not be controlled by you
printf '%s\n' one two three         # if you can control the words eg if you have an array

따라서 아마도 다음과 같이 해야 할 것입니다:

printf '%s\n' "${ids[@]}" | parallel --jobs 28 recon-all -s {.} -all -qcache

값에 특수 문자가 포함된 경우 예상치 못한 토큰화 및 기타 부작용을 방지하려면 일반적으로 배열 대체 및 변수를 인용하는 것을 잊지 마세요.

관련 정보