I trying to run command recon-all with GNU parallel freesurfer preproc i have a bash array of list of patients to run 8 patents simultaneously:

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

and try to run with command:

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

it doesn't work because i suppose i need to have bash array in ls representation, smth like:

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

How can i do that?


The problem is that parallel wants the input to be separated by newlines but when you use echo it is separated by spaces. In order to print some words separated by newlines you can try one of these

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

So you should probably do it like this:

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

Remember to quote your array substitutions and variables in general in order to prevent accidental word splitting and other side effects if your values contain special characters.


If the ids fits on a single command line:

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.