Bash for-loop not continuing even when body is launched in background subshell (works in zsh) -


when run following script in bash:

#!/bin/bash  names=("all" "no_c" "no_r" "no_q")  name in $names;     export name=$name     mkdir -p $name     ( echo 'selection' 'system' | gmx cluster -f ${name}_protein_only.trr -s ${name}_protein_only.pdb -n ${name}_index.ndx -g ${name}/cluster.log -cutoff 0.2 -fit -method gromos -o ${name}/cluster.output -dist ${name}/rmsd-dist.xvg -av -cl ${name}/clusters.pdb ) & done wait 

the loop won't loop until subshell has completed, though i've put background '&'. if run same script in zsh, runs expected (4 parallel tasks). bug or missing something?

you need use different notation elements of array in bash (see arrays , shell parameter expansion):

for name in "${name[@]}"; 

when specify $name , name array, bash treats ${name[0]}.

i used variant on code demonstrate:

#!/bin/bash  names=("all" "no_c" "no_r" "no_q")  name in "${names[@]}"     export name=$name     mkdir -p $name     ( echo $name 'selection' 'system' | sed s/s/z/g; sleep 3 ) & done wait 

Comments