Você não usa o ;
com '&', o '&' por conta própria é suficiente para terminar o comando. Eu acredito que atualmente não há menção a esse comportamento no manual. Seu loop seria simplesmente:
for dir in $(ls); do command $dir & done
Além disso, você deve considerar o uso de glob, em vez de $(ls)
, que falhará se o nome do arquivo contiver espaço em branco. Você pode definir nullglob
para impedir que dir
seja um *
se não houver arquivos:
shopt -s nullglob
for dir in *; do command $dir & done