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